排座位——简单并查集

    科技2024-04-14  83

    c++代码

    int g[105][105]; int a[105]; int find(int x){//查找初始朋友 return x==a[x]?x:a[x]=find(a[x]); } void mer(int x,int y){//合并朋友圈 x=find(x); y=find(y); if(x!=y){ a[y]=x; } } int main(){ for(int i=1;i<=105;i++){//并查集初始化 a[i]=i; } int n,m,k; cin >>n>>m>>k; int o,p,flag; for(int i=1;i<=m;i++){ cin >>o>>p>>flag; g[o][p]=g[p][o]=flag; if(flag==1) mer(o,p); } int o1,p1; for(int i=1;i<=k;i++){ cin >>o>>p; o1=find(o); p1=find(p); if(g[o][p]!=-1&&o1==p1) printf("No problem\n"); else if(g[o][p]==0) printf("OK\n"); else if(o1==p1&&g[o][p]==-1) printf("OK but...\n"); else if(g[o][p]==-1&&o1!=p1) printf("No way\n"); } return 0; }
    Processed: 0.015, SQL: 8