?
题意很简单,关键在于处理‘=’的 情况,如果两个人的rating相等的话,其实可以看成一个人,那么这就用到了并查集来合并。
然后信息不完全或者冲突的情况可以做一遍拓扑排序的过程,初始sum=n,然后如果排序完了还是sum>0 就表示构成了环,所以导致冲突。
用一个标志位表示如果队列的size>1 那么肯定信息不完全,因为首先加入队列里面的就是入度为0,并且不是同一个祖先的点,如果有多个点满足,那么肯定这些点彼此之间的关系无法判断。具体看代码。
#include
#include
#include
#include
#define N 10001 #define maxn 20001 using namespace std; int f[N],in[N],n,sum; int x[maxn],y[maxn]; char z[maxn]; vector
num[N]; void init() { sum=n; for(int i=0;i
q; int flag=0; for(int i=0;i
1) flag=1; int x=q.front(); q.pop(); sum--; for(int i=0;i
0) printf(CONFLICT ); else if(flag) printf(UNCERTAIN ); else printf(OK ); } int main() { //freopen(a.txt,r,stdin); int m; while(scanf(%d%d,&n,&m)!=EOF) { init(); for(int i=0;i
') { num[fx].push_back(fy); in[fy]++; } else { num[fy].push_back(fx); in[fx]++; } } } top_sort(); } return 0; }
?