hdu1811

居然不能用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;
 }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值