比赛 |
20120224 |
评测结果 |
AAAAAAAAAW |
题目名称 |
课程安排问题 |
最终得分 |
90 |
用户昵称 |
Makazeu |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2012-02-24 19:56:19 |
显示代码纯文本
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <algorithm>
using namespace std;
typedef vector<int> Vec;
typedef unsigned int usint;
int N;
const int MAXN=101;
Vec Map[MAXN];
int Zero[MAXN];
int Flag[MAXN];
void init()
{
scanf("%d\n",&N);
int s;
int x;
for(int i=1;i<=N;i++)
{
scanf("%d",&s);
Zero[i]=s;
Flag[i]=0;
for(int j=1;j<=s;j++)
{
scanf("%d",&x);
Map[i].push_back(x);
}
}
for(int i=1;i<=N;i++)
{
sort(Map[i].begin(),Map[i].end());
//for(int j=0;j<Map[i].size();j++)
// printf("%d ",Map[i][j]);
//printf("\n");
}
}
void solve()
{
int X;
int Out=0;
while(Out<N)
{
X=0;
for(int i=1;i<=N;i++)
{
if(Flag[i]==0 && Zero[i]==0)
{
X=i;
break;
}
}
if(X==0 && Out<N)
{
printf("no\n");
exit(0);
}
/*Delete Edge*/
int tmp;
Vec::iterator iter;
for(int i=1;i<=N;i++)
{
iter=find(Map[i].begin(),Map[i].end(),X);
if(iter==Map[i].end())
continue;
Map[i].erase(iter);
Zero[i]--;
}
printf("%d ",X);
Flag[X]=1;
Out++;
}
}
int main()
{
freopen("curriculum.in","r",stdin);
freopen("curriculum.out","w",stdout);
init();
solve();
return 0;
}