居然不能用vector
#include <iostream>
#include <queue>
using namespace std;
#define maxn 10005
int A[maxn*2],B[maxn*2],in[maxn];
char ch[maxn*2];
struct Edge
{
int to;int next;}edge[2*maxn];
int head[maxn*2];
int fa[maxn];
int find(int x)
{
while(x!=fa[x])x=fa[x];
return x;
}
void add(int a,int b,int i)
{
edge[i].to=b;
edge[i].next=head[a];
head[a]=i;
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)==2)
{
for(int i=0;i<n;i++)
{
fa[i]=i;
head[i]=-1;
in[i]=0;
}
int num=n;
for(int i=0;i<m;i++)
{
scanf("%d %c %d",A+i,ch+i,B+i);
if(ch[i]=='=')
{
num--;
fa[find(A[i])]=find(B[i]);
}
}
int con=0;
int unc=0;
for(int i=0;i<m;i++)
{
if(ch[i]=='=')continue;
int a=find(A[i]);
int b=find(B[i]);
if(a==b){con=1;break;}
if(ch[i]=='>'){add(a,b,i);in[b]++;}
if(ch[i]=='<'){add(b,a,i);in[a]++;}
}
queue<int>Q;
for(int i=0;i<n;i++)
if(fa[i]==i&&in[i]==0)Q.push(i);
while(!Q.empty())
{
if(Q.size()>1){unc=1;}
int x=Q.front();Q.pop();num--;
for(int i=head[x];i!=-1;i=edge[i].next)
{
int b=edge[i].to;
in[b]--;
if(in[b]==0)Q.push(b);
}
}
if(num>0)con=1;
if(con)printf("CONFLICT\n");
else if(unc)printf("UNCERTAIN\n");
else printf("OK\n");
}
return 0;
}