ZOJ3277 POJ3836 HDU3269 P2P File Sharing System, 이분도 일치

2117 단어 FileSystememailp2p
이분도 일치.하지만 이곳은 하루하루의 상황을 폭력적으로 일일이 열거해야 한다.
/*******************************************************************************
 # Author : Neo Fung
 # Email : [email protected]
 # Last modified: 2012-05-23 20:59
 # Filename: ZOJ3277 POJ3836 HDU3269 P2P File Sharing System.cpp
 # Description : 
 ******************************************************************************/
#ifdef _MSC_VER
#define DEBUG
#define _CRT_SECURE_NO_DEPRECATE
#endif

#include <fstream>
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <string>
#include <limits.h>
#include <algorithm>
#include <math.h>
#include <numeric>
#include <functional>
#include <ctype.h>
#define MAX 110
using namespace std;

bool map[MAX][MAX];		// 
bool used[MAX];				// 
int mat[MAX];				// 
int m,n,beg[MAX],end[MAX];
bool task[MAX*MAX];

bool find(const int &x)		// x 
{
	int i;
	for(i=1;i<=8;++i)
	{
		if(map[x][i] && !used[i])		// x i i 
		{
			used[i]=1;
			if(!mat[i] || find(mat[i]))	// i i 
			{
				mat[i]=x;
				return true;
			}
		}
	}
	return false;
}

int main(void)
{
#ifdef DEBUG  
	freopen("../stdin.txt","r",stdin);
	freopen("../stdout.txt","w",stdout); 
#endif  

	int tmp,var,ncase=1;
	scanf("%d",&ncase);

	while(ncase--)
	{
		scanf("%d",&n);
		memset(map,0,sizeof(map));
		memset(task,0,sizeof(task));

		m=0;
		int finish=0,start=INT_MAX;
		for(int i=1;i<=n;++i)
		{
			scanf("%d%d%d",&beg[i],&end[i],&var);

			finish=max(finish,end[i]);
			start=min(start,beg[i]);

			while(var--)
			{
				scanf("%d",&tmp);
				map[i][tmp]=1;
			}
		}

		bool ans=true;
		for(int i=start;i<=finish && ans;++i)
		{
			memset(mat,0,sizeof(mat));
			for(int j=1;j<=n && ans;++j)
				if(beg[j]<=i && end[j]>=i)
				{
					memset(used,0,sizeof(used));
					if(!find(j))
						ans=false;
				}
		}

		if(ans)
			printf("YES
"); else printf("NO
"); } return 0; }

좋은 웹페이지 즐겨찾기