2026/4/16 4:50:18
网站建设
项目流程
1)_童装网站建设目标,wordpress 分类,wordpress meta 导出,主题网络图怎么设计题目描述动物王国中有三类动物 A,B,C#xff0c;这三类动物的食物链构成了有趣的环形。A 吃 B#xff0c;B 吃 C#xff0c;C 吃 A。现有 N 个动物#xff0c;以 1∼N 编号。每个动物都是 A,B,C 中的一种#xff0c;但是我们并不知道它到底是哪一种。有人用两种说法对这 N…题目描述动物王国中有三类动物 A,B,C这三类动物的食物链构成了有趣的环形。A 吃 BB 吃 CC 吃 A。现有 N 个动物以 1∼N 编号。每个动物都是 A,B,C 中的一种但是我们并不知道它到底是哪一种。有人用两种说法对这 N 个动物所构成的食物链关系进行描述第一种说法是1 X Y表示 X 和 Y 是同类。第二种说法是2 X Y表示 X 吃 Y。此人对 N 个动物用上述两种说法一句接一句地说出 K 句话这 K 句话有的是真的有的是假的。当一句话满足下列三条之一时这句话就是假话否则就是真话。当前的话与前面的某些真的话冲突就是假话当前的话中 X 或 Y 比 N 大就是假话当前的话表示 X 吃 X就是假话。你的任务是根据给定的 N 和 K 句话输出假话的总数。输入格式第一行两个整数N,K表示有 N 个动物K 句话。第二行开始每行一句话。格式见题目描述与样例。输出格式一行一个整数表示假话的总数。输入输出样例输入 #1复制100 7 1 101 1 2 1 2 2 2 3 2 3 3 1 1 3 2 3 1 1 5 5输出 #1复制3说明/提示对于全部数据1≤N≤5×1041≤K≤105。#includebits/stdc.h using namespace std; const int N5e410; int fa[N*3];//扩展域并查集 int n,k; int find(int x) { return xfa[x]?x:fa[x]find(fa[x]); } void un(int x,int y) { fa[find(x)]find(y); } int main() { cinnk; int ret0; //初始化 for(int i1;i3*n;i) { fa[i]i; } for(int i1;ik;i) { int op,x,y; cinopxy; if(xn||yn) ret; else if(op1)//同类 { //x-y y-x if(find(x)find(ynn)||find(yn)find(x)) { ret; }else{ un(x,y); un(xn,yn); un(xnn,ynn); } }else//x-y { //y-x 同类 if(find(x)find(y)||find(ynn)find(x)) { ret; }else{ un(y,xnn); un(yn,x); un(ynn,xn); } } } coutretendl; return 0; }