⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zoj1376.cpp

📁 最近在acm.zju.edu.cn上通过的题目的代码
💻 CPP
字号:
#include <stdio.h>
#include <memory.h>
#include <map>
#include <vector>

using namespace std;

int n,k;

vector <int> adj[110];
map<int,int> dict;
int st[110];

void input()
{
	scanf("%d %d",&n,&k);
	int i,id,j,x,m;
	dict.clear();
	for (i=0;i<n;++i)
	{
		scanf("%d %d",&id,&m);
		dict[id]=i;
		adj[i].clear();
		for (j=0;j<m;++j)
		{
			scanf("%d",&x);
			adj[i].push_back(x);
		}
	}
	for (i=0;i<n;++i)
		for (j=0;j<adj[i].size();++j)
			adj[i][j]=dict[adj[i][j]];
	for (i=0;i<k;++i)
		scanf("%d",st+i);
	for (i=0;i<k;++i)
		st[i]=dict[st[i]];
}

bool vst[110][110][3];
int	qx[1100],qt[1100];

void bfs(const int &rb)
{
	memset(vst[rb],0,sizeof(vst[rb]));
	qx[0]=st[rb];
	qt[0]=0;
	vst[rb][st[rb]][0]=1;
	int hd=0,tl=1,ax,at,bx,bt,i;
	while (hd<tl)
	{
		ax=qx[hd];
		at=qt[hd];
		bt=1-at;
		++hd;
		for (i=0;i<adj[ax].size();++i)
		{
			bx=adj[ax][i];
			if (!vst[rb][bx][bt])
			{
				vst[rb][bx][bt]=1;
				qx[tl]=bx;
				qt[tl]=bt;
				++tl;
			}
		}
	}
}

bool judge()
{
	int i,j,rb;
	bool flag;
	for (rb=0;rb<k;++rb)
		bfs(rb);
	for (i=0;i<n;++i)
		for (j=0;j<2;++j)
		{
			flag=1;
			for (rb=0;rb<k&&flag;++rb)
				if (!vst[rb][i][j]) flag=0;
			if (flag) return 1;
		}
	return 0;
}

int main()
{
	int cs;
	scanf("%d",&cs);
	while (cs--)
	{
		input();
		if (judge()) printf("YES\n");
		else printf("NO\n");
	}
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -