0
点赞
收藏
分享

微信扫一扫

A1154 Vertex Coloring (25 分| set| hash映射, 附详细注释,逻辑分析)


写在前面

  • 思路分析
  • 结构体数组封装边元数据
  • 巧妙,map映射较麻烦
  • 其中,hash映射顶点通过下标直接获取顶点颜色
  • 枚举所有边,检查边两个顶点颜色是否相同
  • 若全不相同,则输出颜色个数
  • 否则输出No
  • 题目简单,20分钟a题
  • 方案越好,耗费时间短,得分高

测试用例

input:
10 11
8 7
6 8
4 5
8 4
8 1
1 2
1 4
9 8
9 1
1 0
2 4
4
0 1 0 1 4 1 0 1 3 0
0 1 0 1 4 1 0 1 0 0
8 1 0 1 4 1 0 5 3 0
1 2 3 4 5 6 7 8 8 9

output:
4-coloring
No
6-coloring
No

ac代码

  • 参考链接

#include <iostream>
#include <vector>
#include <set>
using namespace std;

struct node
{
int t1, t2;
};
int main()
{
int n, m, k;
cin >> n >> m;
vector<node> v(m);
// 下标值从0开始
for(int i=0; i<m; i++)
scanf("%d %d", &v[i].t1, &v[i].t2);
cin >> k;
while(k--)
{
// 顶点序号作为下标,存储颜色值
int a[10009] = {0};
bool flag = true;
set<int> se;
for(int i=0; i<n; i++)
{
scanf("%d", &a[i]);
se.insert(a[i]);
}
// 同边,顶点颜色相同
for(int i=0; i<m; i++)
{
if(a[v[i].t1] == a[v[i].t2])
{
flag = false;
break;
}
}
if(flag)
printf("%d-coloring\n", se.size());
else
printf("No\n");
}

return 0;
}


举报

相关推荐

0 条评论