题目https://www.luogu.org/problemnew/show/P1330

题意:一个无向边,一个河蟹可以占领一个点,但一个点只能被一个河蟹占领。

占领了一个点之后,这个点所有的边都删除。

问至少需要多少个河蟹可以让所有的边都被删除。

思路

乍一看有点无从下手。但实际上这个题就是一个将图上的点进行黑白着色的问题。

如果一个点被着了黑色,那么他的邻接点都要被着白色。

这道题给的图可能是一个森林,并且着色其实两个颜色可以对换。所以对于每一个连通块,至少应该有的河蟹数是两个颜色中较少的那个。

 #include<cstdio>
#include<cstdlib>
#include<map>
#include<set>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cmath>
#include<stack>
#include<queue>
#include<iostream> #define inf 0x7fffffff
using namespace std;
typedef long long LL;
typedef pair<int, int> pr; int n, m;
const int maxn = ;
const int maxm = 1e5 + ;
int col[maxn];
int head[maxn], to[maxm * ], nxt[maxm * ];
int tot = ; void add(int x, int y)
{
to[++tot] = y;
nxt[tot] = head[x];
head[x] = tot;
to[++tot] = x;
nxt[tot] = head[y];
head[y] = tot;
} int cnt[];
bool dfs(int c, int x)
{
if(col[x] && col[x] != c){
return false;
}
else if(col[x])return true;
col[x] = c;
cnt[c]++;
for(int i = head[x]; i; i = nxt[i]){
int y = to[i];
if(!dfs(c ^ , y))return false;
}
return true;
} int main()
{
scanf("%d%d", &n, &m);
for(int i = ; i < m; i++){
int x, y;
scanf("%d%d", &x, &y);
add(x, y);
}
bool flag = true;
int ans = ;
for(int i = ; i <= n; i++){
if(!col[i]){
if(!dfs(, i)){
flag = false;
break;
}
else{
ans += min(cnt[], cnt[^]);
memset(cnt, , sizeof(cnt));
}
}
}
if(!flag){
printf("Impossible\n");
}
else{
printf("%d\n", ans);
}
}

洛谷P1330 封锁阳光大学【dfs】的更多相关文章

  1. 洛谷——P1330 封锁阳光大学

    P1330 封锁阳光大学 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构 ...

  2. 洛谷P1330 封锁阳光大学(二分图染色)

    P1330 封锁阳光大学 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构 ...

  3. 洛谷 P1330 封锁阳光大学 Label:染色问题

    题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...

  4. 洛谷P1330 封锁阳光大学 [图论,染色]

    题目传送门 封锁阳光大学 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构 ...

  5. 洛谷P1330封锁阳光大学[二分图染色]

    题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...

  6. 洛谷P1330 封锁阳光大学

    题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...

  7. 洛谷 P1330 封锁阳光大学

    题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...

  8. 洛谷 P1330 封锁阳光大学题解

    题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...

  9. 洛谷P1330封锁阳光大学——图的染色

    题目:https://www.luogu.org/problemnew/show/P1330 此题我最初没有思路,暴搜而爆0: 然后才明白关键在于把所有点分成两类,因为可以发现点之间的关系是存在两两对 ...

随机推荐

  1. sqlite 版本更新维护, 表结构判断, 更新

    sqlite会自动维护一个系统表sqlite_master,该表存储了我们所创建的各个table, view, trigger等等信息. sqlite_master表数据字段: type: 类型,取值 ...

  2. mysql中information_schema.tables字段说明

      1. 获取所有表结构(TABLES) SELECT  *  FROM information_schema.TABLES WHERE  TABLE_SCHEMA='数据库名';  TABLES表: ...

  3. Maven打包成可执行JAR(带依赖包)

    <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> ...

  4. python中传统除法、真除法和Floor除法

    1.python2.6及其之前,x/y是传统除法,对于整数会省去小数部分,对于浮点数会保持小数部分. 2.python3中x/y表示真除法,无论任何数据类型都会保留小数部分. 3.python2和3中 ...

  5. python学习-16 列表list

    list 1.由[ ]括住,中括号内各元素由逗号隔开,各元素可以是数字,字符串,列表,布尔值等等. 例如: li = [521,"love",["john",& ...

  6. 『Python基础』第1节 Windows环境下安装Python3.x

    一. Python安装 1. 下载安装包 https://www.python.org/downloads/release/python-374/ # 3.7安装包 # 如需安装python2.7版本 ...

  7. 1.ASP.NET Core Docker学习-Docker介绍与目录

    Docker的优点: 1节约时间,快速部署和启动 2节约成本 3标准化应用发布 4方便做持续集成 5可以用Docker做为集群中的轻量主机或节点 6方便构建基于SOA或者微服务架构 的系统 学习目录: ...

  8. Codeforces 1245 E. Hyakugoku and Ladders

    传送门 显然这个图是个 $DAG$ ,那么就可以考虑跑 $dp$ 了 先考虑没有梯子的情况,首先把每个位置标号,越后面的位置编号越小,终点位置编号为 $1$ 那么从终点往起点 $dp$ ,枚举当前位置 ...

  9. tcpdump使用的心得

    这个linux的抓包工具确实用的不多,这段时间由于处理现场的问题所以就需要这个工具,主要是要知道网卡的信息. 命令就是 tcpdump -i 网卡名

  10. hdu 1325

    .,. 还是待整理 #include <stdio.h> const; typedef struct { int num,root,conn;//数据.根.入度 }Node; Node n ...