uva 11080(二分图染色)
题意:一个国王要派若干士兵看守王国。王国是一张无向图,然后士兵只能站在点上。每个士兵的看守范围是临近的点与边,士兵看管的的边不能重复。问最少用多少个士兵能使每个点和边都有人看守。
思路:这道题可以抽象成二分图,只要一张图满足二分图。结点数少的颜色的和即为最小的士兵数。
代码如下:
1 /************************************************** 2 * Author : xiaohao Z 3 * Blog : http://www.cnblogs.com/shu-xiaohao/ 4 * Last modified : 2014-01-28 08:40 5 * Filename : uva_11080.cpp 6 * Description : 二分图染色 7 * ************************************************/ 8 9 #include <iostream> 10 #include <cstdio> 11 #include <cstring> 12 #include <cstdlib> 13 #include <cmath> 14 #include <algorithm> 15 #include <queue> 16 #include <stack> 17 #include <vector> 18 #include <set> 19 #include <map> 20 #define MP(a, b) make_pair(a, b) 21 #define PB(a) push_back(a) 22 23 using namespace std; 24 typedef long long ll; 25 typedef pair<int, int> pii; 26 typedef pair<unsigned int,unsigned int> puu; 27 typedef pair<int, double> pid; 28 typedef pair<ll, int> pli; 29 typedef pair<int, ll> pil; 30 31 const int INF = 0x3f3f3f3f; 32 const double eps = 1E-6; 33 const int LEN = 501; 34 int n, m, vis[LEN]; 35 vector<int> Map[LEN]; 36 37 bool dfs(int v, int col){ 38 vis[v] = col; 39 for(int i=0; i<Map[v].size(); i++){ 40 if(vis[Map[v][i]] == 0) {if(!dfs(Map[v][i], -col))return false;} 41 else if(vis[Map[v][i]] == col) return false; 42 } 43 return true; 44 } 45 46 int main() 47 { 48 // freopen("in.txt", "r", stdin); 49 50 int T, a, b; 51 scanf("%d", &T); 52 while(T--){ 53 scanf("%d%d", &n, &m); 54 for(int i=0; i<LEN; i++)Map[i].clear(); 55 memset(vis, 0, sizeof vis); 56 for(int i=0; i<m; i++){ 57 scanf("%d%d", &a, &b); 58 Map[a].PB(b); 59 Map[b].PB(a); 60 } 61 int ans = 0, col = 0; 62 for(int i=0; i<n; i++) 63 if(vis[i] == 0){ 64 if(dfs(i, ++col)==false){ 65 ans = -1; 66 break; 67 } 68 int cnt = 0, rcnt = 0; 69 for(int i=0; i<n; i++){ 70 if(vis[i]==col)cnt++; 71 if(vis[i]==-col)rcnt++; 72 } 73 ans += max(1, min(cnt, rcnt)); 74 } 75 if(ans<0)printf("-1\n"); 76 else printf("%d\n", ans); 77 } 78 return 0; 79 }
View Code
转载于:https://www.cnblogs.com/shu-xiaohao/p/3535439.html
uva 11080(二分图染色)相关推荐
- P1155 双栈排序(二分图染色)
P1155 双栈排序(二分图染色) 题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一 ...
- LOJ P1155 双栈排序 二分图染色 图论
https://www.luogu.org/problem/show?pid=P1155 题解: https://www.byvoid.com/zhs/blog/noip2008-twostack 开 ...
- Relation(NOIP模拟赛)(二分图染色)
原题: Description 有n个人,编号为1àn,告诉你那些人之间是不友好的.现在,让你将这n个人分成两组,使得每一组之内的人是互相友好的,如果可以分成两组,则输出如何分组的,如果不可以分成两组 ...
- 【POJ 2942】Knights of the Round Table(点双连通分量,二分图染色)
圆桌会议必须满足:奇数个人参与,相邻的不能是敌人(敌人关系是无向边). 求无论如何都不能参加会议的骑士个数.只需求哪些骑士是可以参加的. 我们求原图的补图:只要不是敌人的两个人就连边. 在补图的一个奇 ...
- Codeforces Round #742 (Div. 2) F. One-Four Overload 构造 + 二分图染色
传送门 文章目录 题意: 思路: 题意: 给你一个n∗mn*mn∗m的矩形,包含...和XXX,你有两种颜色,你需要给...染色使得每个XXX上下左右相邻的...其两种颜色个数相同,输出一种合法方案. ...
- 【Hitachi2020C】ThREE【构造】【二分图染色】
传送门 题意:给一棵nnn个结点的树,构造一个nnn阶排列ppp,使得所有距离为333的点对(i,j)(i,j)(i,j)满足pi+pjp_i+p_jpi+pj和pipjp_ip_jpipj至 ...
- AT2675 [AGC018F] Two Trees (构造+二分图染色+并查集)
description 戳我看题目 solution 正解说是欧拉回路,但是于私而言非常难懂,如果有兴趣可以看香香mm的博客 定义一个点如果有偶数个儿子,就为奇点:如果有奇数个儿子,就为偶点 对于一个 ...
- [NOIP2010]关押罪犯(二分+二分图染色)
传送门 大意:我们把图分为两部分,使得两部分中的内部边的最大权值最小. 思路:哎,拿到题的时候想了二分图染色,发现不好做,但我没有想到二分,只好最后去骗了一个30分.正确的思路是:首先我们要 去二分最 ...
- [NOIp2008] 双栈排序 (二分图染色 + 贪心)
题意 给你一个长为 \(n\) 的序列 \(p\) ,问是否能够通过对于两个栈进行 push, pop(print) 操作使得最后输出序列单调递增(即为 \(1 \cdots n\) ),如果无解输出 ...
最新文章
- python精简笔记(五)——函数式编程
- CSS深入理解流体特性和BFC特性下多栏自适应布局
- 360浏览器急速模式_关于规范电子税务局浏览器要求及设置的通知
- Graph Structure of Neural Networks何凯明团队
- In this year of Hors, he is an adopted son
- iBATIS事务处理
- 集成mysql+tomcat+apache+Eclipse的绿色版开发环境
- 对付ring0 inline hook
- hbuilder怎么设置网页的大小_怎么免费将图片转成PDF?这个方法超简单
- uefi legacy linux知乎,【U盘工具】制作纯净万能“便携系统+pe维护”双系统U盘——UEFI与Legacy双启动...
- Sql Server2014数据库安装教程
- meson test 的 --test-args 参数
- echarts配置项图文介绍——xAxis
- Deepin 20.5 安装nvidia驱动
- html文本框监听粘贴,HTML5将粘贴板上的图片粘贴到文本框中
- 基本的信号——冲激信号与冲激序列
- Unity中实现涂鸦和橡皮擦功能
- PPT基础(二十二)裁剪图片
- 数据分析基础 - 统计学
- git/svn reset/revert 回滚到服务器上的某一个版本
热门文章
- Python中生成一个指定长度的随机字符串实现示例
- 题解-bzoj4221 JOI2012kangaroo
- android MotionEvent中getX()和getRawX()的区别
- 【Python②】python之首秀
- boost function对象
- Referenced file contains errors (http://www.springframework.org/schema/beans/spring-beans-4.3.xsd).
- SimpliciTI简介
- 解决 E: Unable to correct problems, you have held broken packages. 问题
- 20162330 刘伟康_预备作业03
- AFN2.0到3.0的迁移