A1154
个人思路
题意
给出图和个顶点颜色,要求图中相邻顶点的颜色不同,有相同颜色输出no,否则输出颜色的个数
思路
- 存储图(由于数据量1e4,邻接表存储)
- 存储颜色,set去重表示颜色数量
- 遍历图中各个顶点的相邻顶点,判断颜色是否相同
个人思路代码
#include <bits/stdc++.h>
using namespace std;
const int maxn = 10010;
int N, M, K;
vector<int> G[maxn];
int color[maxn];
set<int> cnt;
int main(int argc, char *argv[]) {
scanf("%d%d", &N, &M);
for(int i = 0; i < M; ++i)
{
int u, v;
scanf("%d%d", &u, &v);
G[u].push_back(v);
G[v].push_back(u);
}
scanf("%d", &K);
while(K--)
{
bool flag = true;
cnt.clear();
for(int i = 0; i < N; ++i)
{
scanf("%d", &color[i]);
cnt.insert(color[i]);
}
for(int u = 0; u < N; ++u)
{
if(flag == false)
break;
for(int j = 0; j < G[u].size(); ++j)
{
if(flag == false)
break;
int v = G[u][j];
if(color[u] == color[v])
flag = false;
}
}
if(flag == false)
printf("No\n");
else
printf("%d-coloring\n", cnt.size());
}
return 0;
}