标签:
Time Limit:5000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
Description
Input
Output
Sample Input
Sample Output
Hint
Huge input,scanf is recommended.
#include<iostream> #include<cstdio> using namespace std; #define N 2010 int f[N], v[N]; // v 数组存的是下标与其根结点的性别状态,0代表同性,1代表异性,f存的是下标的根结点 int found(int x) { int k = f[x]; if(f[x] != x) { f[x] = found(k); // 寻找根结点 v[x] = (v[x]+v[k])%2; // 根结点在变,v数组其与根结点的状态也要变,如果与其原先 } return f[x]; } int main() { int t, a, b, n, m; cin >> t; for(int i = 1; i <= t; i++) { cin >> n >> m; int ok = 0; for(int j = 1; j <= n; j++) f[j] = j, v[j] = 0; while(m--) { cin >> a >> b; if(ok) continue; int na = found(a), nb = found(b); if(na == nb && (v[a]+1)% 2 != v[b]) // 如果两个数之前已经有了联系,并且联系不是正常的,同性恋(相等代表正常,ok置为1,就有可疑对象发现 ok = 1; if(na != nb) { f[na] = nb; v[na] = (1-v[a]+v[b])%2; // 如果之前两个没有联系,就把两个数的根结点联系起来(根据已知其与根结点状态~ } } if(i != 1) printf("\n"); printf("Scenario #%d:\n", i); if(ok) printf("Suspicious bugs found!\n"); else printf("No suspicious bugs found!\n"); } printf("\n"); // 格式控制,虽然我也没看见题上哪句话是这意思 return 0; }
之前一直不太懂什么意思,什么算同性恋,是opposite gender?醉了,是与当前已知条件矛盾。一个人和另一个人有关系就在一个树上,有点关系的都在一条树上。一棵树上应该与根结点状态一致,否则就是同性恋,不在一棵树上随便状态。。和食物链是不是一样,但是我根本都没想食物链的事。。
头脑简单四肢发达的生物,想不出来一直想~
标签:
原文地址:http://www.cnblogs.com/Tinamei/p/4674619.html