P1418 选点问题(黑白染色)

P1418 选点问题

题目描述

给出n个点,m条边,每个点能控制与其相连的所有的边,要求选出一些点,使得这些点能控制所有的边,并且点数最少。同时,任意一条边不能被两个点控制

输入输出格式

输入格式:

第一行给出两个正整数n,m

第2~m+1行,描述m条无向边

每行给出x,y,表示一条无向边(x,y)

输出格式:

输出最少需要选择的点的个数,如果无解输出“Impossible”(不带引号)

输入输出样例

输入样例#1:

7 5
1 2
1 3
5 6
6 7
1 2

输出样例#1:

2

说明

【数据范围】

对于30%的数据1<=n<=100

对于100%的数据1<=n<=1000

m<=n^2

不保证图连通

【题目来源】

tinylic改编

黑白染色问题,与封锁阳光大学一样,代码都没改一改。

 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4
 5 const int MAXN = 10100;
 6 struct Edge{
 7     int to,nxt;
 8 }e[200100];    //双向边乘2
 9 int col[MAXN],head[MAXN];
10 bool vis[MAXN],flag = true;
11 int n,m,cnt,ans,ans1,ans2;
12
13 void add(int u,int v)
14 {
15     ++cnt;
16     e[cnt].to = v;
17     e[cnt].nxt = head[u];
18     head[u] = cnt;
19 }
20
21 void dfs(int u,int c)
22 {
23     vis[u] = true;
24     if (c==1) col[u]=2, ans2++;
25     else if (c==2) col[u] = 1, ans1++;
26     for (int i=head[u]; i; i=e[i].nxt)
27     {
28         int v = e[i].to;
29         if (vis[v])    //不能写成if(vis[i]&&col[u]==col[v]),影响到else的执行
30         {
31             if (col[v]==col[u])
32                 flag = false;
33         }
34         else dfs(v,col[u]);
35     }
36 }
37 int main()
38 {
39     scanf("%d%d",&n,&m);
40     for (int x,y,i=1; i<=m; ++i)
41     {
42         scanf("%d%d",&x,&y);
43         add(x,y);
44         add(y,x);
45     }
46     for (int i=1; i<=n; ++i)
47         if (!vis[i])
48         {
49             ans1 = ans2 = 0;
50             dfs(i,1);
51             if (flag) ans += min(ans1,ans2);
52             else break;
53         }
54     if (flag) printf("%d",ans);
55     else printf("Impossible");
56     return 0;
57 }
时间: 2024-08-11 01:36:21

P1418 选点问题(黑白染色)的相关文章

POJ 1466 Girls and Boys 黑白染色 + 二分匹配 (最大独立集) 好题

有n个人, 其中有男生和女生,接着有n行,分别给出了每一个人暗恋的对象(不止暗恋一个) 现在要从这n个人中找出一个最大集合,满足这个集合中的任意2个人,都没有暗恋这种关系. 输出集合的元素个数. 刚开始想,把人看成顶点,若有暗恋的关系,就连一条边,构成一个图 独立集的概念:一个图中两两互不相连的顶点集合 所以这道题,就是要求最大独立集 有:最大独立集+最小顶点覆盖=|V|(顶点的总个数) 那就求最小顶点覆盖了 根据题意: 暗恋的对象性别不同,所以a暗恋b,b暗恋c,c暗恋a这种关系不可能存在 也

hdu1507Uncle Tom&#39;s Inherited Land*(最大匹配,黑白染色)

Uncle Tom's Inherited Land* Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 1943 Accepted Submission(s): 809 Special Judge Problem Description Your old uncle Tom inherited a piece of land from his

luogu P1418 选点问题

题目描述 给出n个点,m条边,每个点能控制与其相连的所有的边,要求选出一些点,使得这些点能控制所有的边,并且点数最少.同时,任意一条边不能被两个点控制 输入输出格式 输入格式: 第一行给出两个正整数n,m 第2~m+1行,描述m条无向边 每行给出x,y,表示一条无向边(x,y) 输出格式: 输出最少需要选择的点的个数,如果无解输出“Impossible”(不带引号) 输入输出样例 输入样例#1: 7 5 1 2 1 3 5 6 6 7 1 2 输出样例#1: 2 说明 [数据范围] 对于30%的

hdu 5285 二分图黑白染色

题意:给出 n 个人,以及 m 对互不认识的关系,剩余的人都互相认识,要将所有人分成两组,组内不能有互不认识的人,要求每组至少有一人,并且第一组人数尽量多,问两组人数或不可能时单独输出 BC 48 场的B题,这两天黑白染色做的不少,要把互不认识的人分在不同的组里,其实就是看整个图是否能够形成二分图,如果不能形成二分图的话,那么说明图中一定存在奇环,那么人就不能分在两个组中而保证组内都认识.所以就是判二分图,用黑白染色,然后将染色后数量多的点分在第一组,剩余分在第二组.但是题中有坑点,首先,人数小

二分图判定--黑白染色

首先,二分图又叫二部图,特点是所有点分成两半,每一半内的点之间没有边相连,只有两半之间会有边相连,图内无奇环,当然,单点图或者有单点的图也属于二分图,因此最主要的区分就是图内无奇环了.对于一个图,是否是二分图,常用的方法是黑白染色,由于给定图常常不完全连通,所以只要对于每一个还未标记过的点,从它开始DFS按照黑白相间的方法标记颜色(0/1),每次DFS操作就是将这一连通块内按黑白分成两半,若途中遇到需要然成某种颜色但已经标记为另一种颜色时,则表明出现了奇环,不能构成二分图.而要注意,每次DFS只

HDU 1565 (最大流+黑白染色化二分图求最小割)

http://acm.hdu.edu.cn/showproblem.php?pid=1565 思路:将横纵坐标和为偶尔染白色,其他染黑色,黑点连接源点,流量为该点的值,白点连接汇点,流量为该点的值,黑白点有相邻的就连边,值为无穷大.最后求最大流,即该图的最小割. PS:刚开始不明白为为什么最大流会等于最小割,为什么所有的点之和减去最小割就会等于答案. 我的理解是:整张图其实就跟连接管道一样,连接了黑点表示取了黑点那个值的流量,白点也是,而连接了相邻的黑白点求出的最大流就会是流量较小的那个的值.好

HDU1507 Uncle Tom&#39;s Inherited Land* 二分图匹配 匈牙利算法 黑白染色

原文链接http://www.cnblogs.com/zhouzhendong/p/8254062.html 题目传送门 - HDU1507 题意概括 有一个n*m的棋盘,有些点是废的. 现在让你用1*2的矩形覆盖所有的不废的点,并且不重叠,问最多可以覆盖多少个1*2的矩形,输出方案,有SPJ. 输入描述: 多组数据,每组首先两个数n,m(如果n和m为0,则结束程序) 然后给出k 然后给出k个二元组(x,y)表示废点的坐标. 题解 按照前两片博文的算法已经不行了,因为方案不对了. 所以我们要进行

bzoj4808: 马 &amp; bzoj3175: [Tjoi2013]攻击装置 (黑白染色+最小割)

bzoj4808: 马 & bzoj3175: [Tjoi2013]攻击装置 题目:传送门 简要题意: 和n皇后问题差不多,但是这里是每个棋子走日子,而且有些格子不能放棋子.求最多能放多少个棋子. 题解: 双倍经验好评 之前看过机房神犇做...有点印象是最小割. 但是直接割的话不会...要应用到黑白染色: 最开始我想递归染色,也就是取一个开始染,然后递归下去... 波老师说会错ORZ...因为感觉递归的情况不好掌握,有可能会重复染色... 结果有一个肥肠巧妙的方法...直接相邻的染为不同颜色 之

黑白染色——封锁阳光大学

所谓黑白染色,就是指用bfs或dfs依次遍历每一个点,同时进行染色,一黑一白,如果遇到已经染过色的点并且点的颜色和即将要染的颜色冲突,就说明无法进行二分,无法满足染色.大概就是这样的. 下面我们看一道例题: P1330 封锁阳光大学 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M条道路连接.每只河蟹可以对一个点进行封锁,当某个点被封锁后,与这个