晴朗的博客

当你得意的时候,不要忘记你有一半命运掌握在上帝手中;当你失意的时候,不要忘记你有一半命运掌握在自己手中!...

hdu 2647拓扑排序 容器
#include<stdio.h>
#include<queue>
#include<vector>
#include<iostream>
using namespace std;
#define  N  11000
int n,m,sum;
int indegree[N],value[N];
vector<int>now[N];
int Max(int a,int b) {
return a>b?a:b;
}
int find() {
       queue<int>q;
  int i,cur,f;
  for(i=1;i<=n;i++)
if(indegree[i]==0) {
value[i]=888;
q.push(i);
}
f=n;
while(!q.empty()) {
cur=q.front();
q.pop();
f--;
for(i=0;i<now[cur].size();i++) {
        value[now[cur][i]]=Max(value[cur]+1,value[now[cur][i]]);
if(--indegree[now[cur][i]]==0)
q.push(now[cur][i]);
}
}
if(f==0)
return 0;
return 1;
}
int main() {
int i,a,b;
while(scanf("%d%d",&n,&m)!=EOF) {
for(i=1;i<=n;i++)
now[i].clear();
memset(indegree,0,sizeof(indegree));
memset(value,0,sizeof(value));
while(m--) {
scanf("%d%d",&a,&b);
    indegree[a]++;
now[b].push_back(a);
}
if(find()) {
printf("-1\n");
continue;
}
sum=0;
for(i=1;i<=n;i++)
sum+=value[i];
printf("%d\n",sum);
}
return 0;
}
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011483306/article/details/17125813
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

hdu 2647拓扑排序 容器

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭