比赛 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;
}