gym 101492 A. Comunicating the Tibet(dfs遍历无向图)
来源:互联网 发布:身份证给别人开淘宝店 编辑:程序博客网 时间:2024/05/16 14:36
题意:
输入n,m,k;分别代表n个节点,m条边,每个节点的取值范围(1~k的正整数)。让你给每个节点赋值,使得每个节点和相连的节点的值不相同。
思路:
一个一个节点赋值,暴力枚举赋值,赋值时考虑周围的节点有没有冲突。。。。但是不能1~n的取节点赋值,,只能从节点1开始dfs遍历图赋值(即每赋值一个节点,必须马上考虑该节点周围的值,才能保证得到最优策略)
给出一组数据
4 3 2
1 3 对应到图 1----3----4-----2
3 4
4 2
如果枚举1~n赋值,输出-1;
如果dfs遍历赋值,
输出
1
2
2
1
代码:
#include <bits/stdc++.h>using namespace std;const int maxn = 50000+7;vector<int> arr[maxn];int col[maxn];int n,m,k;void dfs(int u){ if(col[u]) return ; int len = arr[u].size(); for(int i = 1;i<=k*2;i++) { int j; for(j = 0;j<len;j++) { int v = arr[u][j]; if(col[v]==i) break; } if(j==len) { col[u] = i; break; } } for(int i = 0;i<len;i++) { int v = arr[u][i]; dfs(v); }}int main(){ memset(col,0,sizeof(col)); scanf("%d%d%d",&n,&m,&k); for(int i = 0;i<m;i++) { int u,v; scanf("%d%d",&u,&v); arr[u].push_back(v); arr[v].push_back(u); } for(int i = 1;i<=n;i++) if(!col[i]) dfs(i); for(int i = 1;i<=n;i++) if(col[i]>k) { printf("-1\n"); return 0; } for(int i = 1;i<=n;i++) printf("%d\n",col[i]); return 0;}
阅读全文
1 0
- gym 101492 A. Comunicating the Tibet(dfs遍历无向图)
- 无向DFS遍历
- 邻接矩阵遍历(无向图,邻接矩阵,DFS,BFS)
- 无向图邻接表的深度优先遍历(DFS)
- 无向图的邻接矩阵 -- DFS - 深度优先遍历
- DFS应用——遍历无向图
- 邻接表无向图的创建和遍历(dfs)
- 邻接矩阵无向图的创建和遍历(dfs)
- 无向图的遍历(BFS+DFS,MATLAB)
- 无向图+DFS
- 无向图DFS算法
- GYM 101128 A.Promotions(dfs)
- GYM 101128 A.Promotions(dfs)
- 利用邻接矩阵存储无向图,并实现BFS(非递归) DFS(递归+非递归)两种遍历
- 无向图的邻接表表示法 及 深搜遍历DFS
- 数据结构之无向图邻接表DFS之查询遍历关节点
- 数据结构之无向图邻接表DFS之查询遍历关节点(参考整理严蔚敏数据结构)
- 算法导论—无向图的遍历(BFS+DFS,MATLAB)
- 网络类型
- ionic页面的生命周期
- 不平衡数据分类
- Excel Sheet Column
- java代码注释规范
- gym 101492 A. Comunicating the Tibet(dfs遍历无向图)
- JavaScript中浏览器打开或下载app
- android中xml tools属性详解
- CSS3盒子模型
- Android功能集锦(2017.8)
- 1、Two Sum
- Docker总结(二)
- 找出1000以内的完数,并且按照一定的格式输出
- 表演艺术