1 条题解
-
0
C :
#include <stdio.h> int a[510][510]; int main() { int n,m,i,j,u,v,n1,k; while (scanf("%d %d",&n,&m)&&n) { for (i=0;i<=n;i++) for (j=1;j<=n;j++) { if (i==0) a[i][j]=1; else a[i][j]=0; } for (i=0;i<m;i++) { scanf("%d %d",&u,&v); a[u][v]++; } n1=n; while (n1--) { for (i=1;i<=n;i++) { if (a[0][i]==1) { for (j=1;j<=n;j++) if (a[j][i]!=0) break; } if ((j==n+1)&&(a[0][i]==1)) { a[0][i]=0; for (k=1;k<=n;k++) { if (a[i][k]!=0) a[i][k]--; } if (n1>0) printf("%d ",i); else printf ("%d\n",i); break; } } } } return 0; }C++ :
#include <stdio.h> #include <vector> #include <queue> using namespace std; int indegree[505]; vector<int> edge[505]; priority_queue<int , vector<int> , greater<int> > Q; int main() { int output[505]; int n,m,i; while(scanf("%d%d",&n,&m)!=-1) { if(n==0 && m==0) break; for(i=1;i<=n;i++) { indegree[i]=0; edge[i].clear(); output[i]=0; } while(m--) { int a,b; scanf("%d%d",&a,&b); edge[a].push_back(b); indegree[b]++; } while(!Q.empty()) Q.pop(); for(i=1;i<=n;i++) { if(indegree[i]==0) Q.push(i); } int size=0; while(!Q.empty()) { int tmp=Q.top(); Q.pop(); output[size++]=tmp; for(i=0;i<edge[tmp].size();i++) { indegree[edge[tmp][i]]--; if(indegree[edge[tmp][i]]==0) Q.push(edge[tmp][i]); } } for(i=0;i<size;i++) { if(i) printf(" %d",output[i]); else printf("%d",output[i]); } printf("\n"); } return 0; }
信息
- ID
- 877
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者