hdu3342(拓扑排序,注意判重)

#include<iostream>
#include<cstring>
using namespace std;
int main(){
    
    
    int m,r;
    cin>>m>>r;
    while(m){
    
    
        int relation[m][m];
        int in[m];
        memset(relation,0,sizeof(relation));
        memset(in,0,sizeof(in));
        int pre,rear;
        for(int i=0;i<r;i++){
    
    
            cin>>pre>>rear;
            if(!relation[pre][rear]){
    
    
                relation[pre][rear]=1;
                in[rear]++;
            }
            
        }

        for(int i=0;i<m;i++){
    
    
            for(int j=0;j<m;j++){
    
    
                if(in[j]==0){
    
    
                    in[j]--;
                    for(int k=0;k<m;k++){
    
    
                            if(relation[j][k]) in[k]--;
                    }
                    break;
                }
            }
        }

        int flag=1;

        for(int i=0;i<m;i++){
    
    
            if(in[i]!=-1){
    
    
                cout<<"NO"<<endl;
                flag=0;
                break;
            }
        }

        if(flag) cout<<"YES"<<endl;
        cin>>m>>r;
    }
return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_45670020/article/details/109063313
今日推荐