题目链接
解题思路:
一看是图的问题 有点怯 然后寻思用暴力写写试试
以为会超时呢 也没超时 存边的时候用的 vector 然后又用数组存边 交了下 耗时更少呢
代码如下:
#include<iostream>
#include<vector>
#include<algorithm>
#include<set>
using namespace std;
const int maxn=550;
vector<int> a[maxn];
set<int> s;
int b[maxn];
int main()
{
int v,e,k,n,x,y;
int i,j;
cin>>v>>e>>k;
for(i=0;i<e;i++)
{
cin>>x>>y;
a[x].push_back(y);
a[y].push_back(x);
}
cin>>n;
while(n--)
{
int flag=0;
s.clear();
for(i=1;i<=v;i++)
{
cin>>b[i];
s.insert(b[i]);
}
if(s.size()!=k)//草率了 一开始写的大于
{
cout<<"No"<<endl;
continue;
}
for(i=1;i<=v;i++)
{
for(j=0;j<a[i].size();j++)
{
if(b[a[i][j]]==b[i])
{
flag=1;
break;
}
}
if(flag)
break;
}
if(flag)
cout<<"No"<<endl;
else
cout<<"Yes"<<endl;
}
return 0;
}