hdu 2647 Reward 拓扑排序
2012-08-10 18:03
295 查看
#include<iostream> #include<string.h> #include<queue> #define size 10010 using namespace std; int n,m ,top ,ans; struct E { int v,next; }e[size*2]; struct EE { int dep , rd , head; }node[size]; void insert(int u , int v) { e[top].v=v; e[top].next = node[u].head; node[u].head=top++; ++node[v].rd; } int Top_sort() { queue<int> Q; // while(!Q.empty()) Q.pop(); for(int i=1;i<=n;i++) if(node[i].rd==0) Q.push(i); int t=0; while(!Q.empty()) { t++; int p=Q.front(); Q.pop(); ans+=node[p].dep; for(int i=node[p].head;i!=NULL;i=e[i].next) { int q= e[i].v; --node[q].rd; if(node[q].rd==0) { Q.push(q); node[q].dep=node[p].dep+1; } } } return t==n; } int main() { int u,v; while(scanf("%d%d",&n,&m)!=EOF) { top=1 ;ans=0; memset(node,0,sizeof(node)); for(int i=0;i<m;i++) { scanf("%d%d",&u,&v); insert(v,u); } printf("%d\n",Top_sort()?888*n+ans:-1); } return 0; }
相关题目:hdu 2647 3342 1285 1811 2094
相关文章推荐
- hdu 2647 Reward 拓扑排序
- hdu 2647 Reward(拓扑排序)
- hdu 2647 Reward 拓扑排序入门
- HDU 2647 Reward(拓扑排序)
- hdu 2647 Reward(拓扑排序)
- HDU 2647 Reward【拓扑排序】
- 拓扑排序(主要是确定环和加法) HDU 2647 Reward
- hdu 2647 Reward 拓扑排序
- HDU 2647 Reward(拓扑排序)
- HDU 2647 Reward (拓扑排序)
- HDU 2647 Reward(图论-拓扑排序)
- hdu 2647 Reward(拓扑排序)
- HDU 2647 Reward(拓扑排序)
- HDU 2647 Reward(拓扑排序)
- HDU 2647 Reward【拓扑排序】
- hdu 2647 Reward(拓扑排序)
- HDU 2647 -- Reward (拓扑排序)
- HDU 2647 Reward 拓扑排序
- hdu 2647 Reward(拓扑排序)
- HDU_2647 Reward (拓扑排序)