记录编号 |
35688 |
评测结果 |
AAAAAAAAAA |
题目名称 |
课程安排问题 |
最终得分 |
100 |
用户昵称 |
feng |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.004 s |
提交时间 |
2012-02-28 18:58:28 |
内存使用 |
0.46 MiB |
显示代码纯文本
- #include<fstream>
- #include<algorithm>
- using namespace std;
- struct node {
- int s,next;
- };
- struct edge {
- int y,v,next,f;
- };
- int i,j,k,n,m,top,tmp,t,head,tail,min,sum=0,p,x,y;
- edge e[101];
- node a[101];
- bool f[101];
- bool q[101];
- int queue[10000][5];
- int ind[101];
- int af[101];
- void add(int x1,int y1,int v1)
- {
- m++;
- a[x1].s=a[x1].s+1;
- e[m].y=y1;
- e[m].v=v1;
- e[m].next=a[x1].next;
- a[x1].next=m;
- }
- void swap(int x,int y)
- {
- queue[0][1]=queue[x][1];
- queue[x][1]=queue[y][1];
- queue[y][1]=queue[0][1];
- queue[0][2]=queue[x][2];
- queue[x][2]=queue[y][2];
- queue[y][2]=queue[0][2];
- }
- int main()
- {
- ifstream fin("curriculum.in");
- ofstream fout("curriculum.out");
- fin>>n;
- m=0;
- for (i=1;i<=n;i++)
- af[i]=0;
- for (i=1;i<=n;i++)
- {
- fin>>k;
- for (j=1;j<=k;j++)
- {
- fin>>y;
- x=i;
- add(y,x,1);
- }
- }
- for (i=1;i<=m;i++)
- {
- ind[e[i].y]++;
- }
- head=1;tail=0;
- for (i=1;i<=n;i++)
- f[i]=false;
- for (i=1;i<=n;i++)
- if (ind[i]==0)
- {
- sum++;
- af[i]=sum;
- tail++;
- queue[tail][1]=i;
- f[i]=true;
- }
- j=1;
- queue[1][2]=0;
- tmp=queue[head][1];
- sum=0;
- while (head<=tail)
- {
- int mini=100000000;
- int u;
- for (i=head;i<=tail;i++)
- if (queue[i][1]<mini)
- {
- mini=queue[i][1];
- u=i;
- }
- swap(head,u);
- tmp=queue[head][1];
- sum++;
- af[queue[head][1]]=sum;
- f[tmp]=true;
- t=a[tmp].next;
- for (i=1;i<=n;i++)
- q[i]=false;
- for (i=1;i<=a[tmp].s;i++)
- {
- ind[e[t].y]--;
- if (ind[e[t].y]==0)
- {
- q[e[t].y]=true;
- tail++;
- queue[tail][1]=e[t].y;
- queue[tail][2]=head;
- f[e[t].y]=true;
- };
- t=e[t].next;
- };
- head++;
- };
- i=0;
- bool t=true;
- for (i=1;i<=n;i++)
- {
- if (ind[i]!=0) t=false;
- }
- if (t)
- {
- for (i=1;i<=n;i++)
- for (j=1;j<=n;j++)
- {
- if (i==af[j])
- fout<<j<<' ';
- }
- }else
- {fout<<"no";}
- fin.close();
- fout.close();
- return 0;
- }