用C++实现信奥题 P11640 Graph)
P11640 Graph题目背景hack 数据已添加位于 Subtask#5不计分。题目描述有一张nnn个点的图每个点可以是黑色或白色的。有mmm条限制第iii条限制会给定ai,bi,cia_i,b_i,c_iai,bi,ci表示ai⇒bia_i\Rightarrow b_iai⇒bi需要有一条长度为cic_ici的路径路径可以重复经过某条边或点。问是否存在一个若干条边权为111有向边的图满足满足上述mmm个条件。假如这张图有kkk条边则对于每个∀1≤i≤k\forall 1\le i\le k∀1≤i≤k设第iii条边是由uiu_iui指向viv_ivi的那么uiu_iui的颜色与viv_ivi的不同。输入格式第一行一个整数TTT表示数据的组数。对于每组数据第一行两个整数n,mn,mn,m。接下来mmm行每行三个整数分别为ai,bi,cia_i,b_i,c_iai,bi,ci。输出格式TTT行每行一个字符串s∈{Yes,No}s\in\{\tt{Yes},\tt{No}\}s∈{Yes,No}。第iii行表示第iii个问题的答案。输入输出样例 #1输入 #11 5 4 1 3 4 4 2 7 4 4 0 5 2 1输出 #1Yes说明/提示【样例解释】可以构造出以满足要求。【数据范围】本题采用捆绑测试。Subtask #15pts5\text{pts}5ptsm0m0m0。Subtask #220pts20\text{pts}20ptsn≤10n\le 10n≤10。Subtask #325pts25\text{pts}25ptsn≤103n\le 10^3n≤103。Subtask #450pts50\text{pts}50pts无特殊限制。对于100%100\%100%的数据1≤T≤101\le T\le 101≤T≤101≤n≤1061\le n\le 10^61≤n≤1060≤m≤1060\le m\le 10^60≤m≤1061≤ai,bi≤n1\le a_i,b_i\le n1≤ai,bi≤n0≤ci≤1090\le c_i\le 10^90≤ci≤109。C实现#includebits/stdc.h#defineN2000005#definexfirst#defineysecondusingnamespacestd;intT1,n,m,fa[N];intfind(intx){returnfa[x]x?x:fa[x]find(fa[x]);}voidsolve(intcs){cinnm;for(inti1;in*2;i){fa[i]i;}boolf1;for(inti1;im;i){inta,b,c;cinabc;if(a!bc0)f0;if(n1c!0)f0;if(!f)continue;if(c%20){if(find(an)find(b)||find(a)find(bn)){f0;continue;}fa[find(a)]find(b);fa[find(an)]find(bn);}else{if(find(a)find(b)||find(an)find(bn)){f0;continue;}fa[find(an)]find(b);fa[find(a)]find(bn);}}if(n1){if(f)coutYes\n;elsecoutNo\n;return;}intxfind(1);boolg0;for(inti1;in;i){if(find(i)!x){g1;break;}}fg;if(f)coutYes\n;elsecoutNo\n;}signedmain(){cinT;for(intcs1;csT;cs){solve(cs);}return0;}后续接下来我会不断用C来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现记录日常的编程生活、比赛心得感兴趣的请关注我后续将继续分享相关内容