• hdu 1811拓扑排序+并查集(容器实现)


    http://www.cnblogs.com/newpanderking/archive/2012/10/18/2729566.html

    #include<stdio.h>

    #include<iostream>
    #include<vector>
    #include<queue>
    using namespace std;
    const int N=11000;
    vector<int>link[N];//容器来是模拟邻接表
    int pre[N],a[N],b[N],indegree[N],n,m,sum;
    char c[N];
    int find(int x) {//路径压缩
    if(x!=pre[x])
    pre[x]=find(pre[x]);
    return pre[x];
    }
    int Union(int x,int y) {//合并
    int f1=find(x);
    int f2=find(y);
    if(f1==f2)
    return 0;
    pre[f1]=f2;
    return 1;
    }
    void bfs() {
           queue<int>q;
      int i,flag;
      for(i=0;i<n;i++) {
      if(find(i)==i&&indegree[i]==0)//将所有第一名的代表放进队列
      q.push(i);
      }   flag=0;
      while(!q.empty()) {//队列实现拓扑排序
      int cur=q.front();
      if(q.size()>1)flag=1;//信息已经不完整了,但是还有可能含有冲突
      q.pop();////和上面的q.size()的判断的顺序不能交换
      for(i=0;i<link[cur].size();i++)
      if(--indegree[link[cur][i]]==0)
      q.push(link[cur][i]);
      sum--;
      }
      if(sum>0)//冲突优先
      printf("CONFLICT ");
      else
      if(flag==1)//没有冲突了看信息是否完整
      printf("UNCERTAIN ");
      else
      printf("OK ");
    }
    int main() {
    int i,f1,f2;
    while(scanf("%d%d",&n,&m)!=EOF) {
    for(i=0;i<n;i++) {//初始化
    link[i].clear();
    pre[i]=i;
    }
    sum=n;
    for(i=0;i<m;i++) {
    scanf("%d %c%d",&a[i],&c[i],&b[i]);
    if(c[i]=='=') 
    if(Union(a[i],b[i]))
    sum--;
    }
    memset(indegree,0,sizeof(indegree));//入度
    for(i=0;i<m;i++)
    if(c[i]!='=') {
    f1=find(a[i]);
    f2=find(b[i]);
    if(c[i]=='>') {
    link[f1].push_back(f2);
    indegree[f2]++;
    }
    else {
    link[f2].push_back(f1);
    indegree[f1]++;
    }
    }
    bfs();
    }
    return 0;
    }











  • 相关阅读:
    hdu6315 Naive Operations
    noi.ac #525 神树的权值
    JSOI2018 潜入行动
    GXOI/GZOI2019 旅行者
    Educational Codeforces Round #67
    [六省联考2017] 分手是祝愿
    NOI2014 随机数生成器
    NOI2012 随机数生成器
    USACO19JAN Redistricting
    HNOI2015 菜肴制作
  • 原文地址:https://www.cnblogs.com/thefirstfeeling/p/4410882.html
Copyright © 2020-2023  润新知