Luogu P1330 封锁阳光大学【Dfs】 By cellur925
题目传送门
这道题我们很容易去想到二分图染色,但是这个题好像又不是一个严格的二分图。
开始的思路:dfs每个点,扫与他相邻的每个点,如果没访问,染相反颜色;如果访问过,进行检查,如果不可行,直接结束程序。每dfs一次,计数器加1.--40pts
然鹅这个思路存在(很明显的)漏洞:我们统计的是默认初始颜色所染的个数,但是题目中求的是最小的河蟹放置个数,很有可能相反颜色放的更少。--100pts
另外在题解中经某位高人指点,终于懂得
1 for(int i=1;i<=n;i++) 2 if(!vis[i]) dfs(i)
这种语句的真正含义!其实在1~n的循环中,实际从主程序中调用了几次Dfs函数,就有几个联通块。(很多情况下图不保证联通)因为我们回想大法师的真正含义,他是不撞南墙不回头(回溯)的。除非没有新的南墙可撞。
然后我们就愉快的AC了。
Code
1 #include<cstdio> 2 #include<algorithm> 3 4 using namespace std; 5 6 int n,m,a,b,ans,tot; 7 int head[10090],vis[10090],sum[5],color[10090]; 8 struct node{ 9 int to,next; 10 }edge[200090]; 11 12 void add(int x,int y) 13 { 14 edge[++tot].to=y; 15 edge[tot].next=head[x]; 16 head[x]=tot; 17 } 18 19 void dfs(int u,int pts) 20 { 21 vis[u]=1;color[u]=pts;sum[pts]++; 22 for(int i=head[u];i;i=edge[i].next) 23 { 24 int y=edge[i].to; 25 if(vis[y]) 26 { 27 if(color[y]!=3-pts) 28 { 29 printf("Impossible"); 30 exit(0); 31 } 32 } 33 else dfs(y,3-pts); 34 } 35 } 36 37 int main() 38 { 39 scanf("%d%d",&n,&m); 40 for(int i=1;i<=m;i++) 41 scanf("%d%d",&a,&b),add(a,b),add(b,a); 42 for(int i=1;i<=n;i++) 43 { 44 sum[1]=0,sum[2]=0; 45 //实质在扫联通块 46 if(!vis[i]) dfs(i,1),ans+=min(sum[1],sum[2]); 47 } 48 printf("%d",ans); 49 return 0; 50 }
View Code
转载于:https://www.cnblogs.com/nopartyfoucaodong/p/9504885.html
Luogu P1330 封锁阳光大学【Dfs】 By cellur925相关推荐
- luogu P1330 封锁阳光大学
嘟嘟嘟 又刷了一道水题-- 很显然只要判断这个图是否是二分图就行了,判断方法就是染色.如果对于边(u->v),两个点颜色相同,那么就说明图中存在奇环,不是二分图. 统计答案的时候输出两种颜色较小 ...
- P1330 封锁阳光大学
P1330 封锁阳光大学 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构 ...
- 洛谷 P1330 封锁阳光大学 Label:染色问题
题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...
- 洛谷P1330 封锁阳光大学
题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...
- 洛谷 P1330 封锁阳光大学题解
题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...
- 洛谷 P1330 封锁阳光大学 二分图染色
题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...
- 【C++】洛谷P1330 封锁阳光大学
封锁阳光大学 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由 nnn 个点构成的 ...
- 黑白染色——封锁阳光大学
所谓黑白染色,就是指用bfs或dfs依次遍历每一个点,同时进行染色,一黑一白,如果遇到已经染过色的点并且点的颜色和即将要染的颜色冲突,就说明无法进行二分,无法满足染色.大概就是这样的. 下面我们看一道 ...
- 【并查集】封锁阳光大学(P1330)
正题 P1330 题目大意 给你一张无向图,问你最少选择多少个点,使得每一条边都有且只有一个端点被选择 解题思路 每一条边只能选一个点,那么考虑对这个图黑白染色 可以用扩展域并查集判二分图,然后两边的 ...
最新文章
- 阿里机器学习算法面经(已offer)
- Java联网技术之一HTTP
- 趣学python3(26)-pygame-蛇身运动
- php 怎么写原生sql,thinkphp 原生sql 怎么写?
- python绘制混淆矩阵_如何实现python绘制混淆矩阵?
- linux内核rest_init分析
- WebSocket剖析
- 人民大学的《统计学》
- 《OSPF网络设计解决方案(第2版)》一第2章 介绍OSPF
- ubuntu简易部署Python3编写的djangoWeb应用
- 华为怒发公开信;锤子手机难产罗永浩陷尴尬处境;苹果错失 5G | 极客头条
- Unity app调试
- 计算机科学导论复习提纲,计算机科学导论复习资料整理
- 基于微信旅游景区购票小程序毕业设计毕设作品(5)开题报告答辩PPT
- Java开发手册!java项目描述模板,挥泪整理面经
- AT学习报告一 软件的初步使用
- 荷池堪作镜,盈盈可鉴心。(递推
- pta 天梯赛 7-3 换硬币 (20 分)day4
- 计算机网络(IP/TCP网络分层)
- html骂人网页,网页前台通过js非法字符过滤代码(骂人的话等等)
热门文章
- oracle 怎么创建sid,oracle创建实例SID
- 灵敏度分析领域--多种编程语言工具箱总结
- python3蓝牙通讯_使用Python 3.3的蓝牙服务器
- 无界共创,明道云参与广汽本田IT新技术展
- [分享] jQuery开发之windows边栏小工具开发(Gadget development)- windows小工具实现的公司内部分机查询工具...
- 沧州市中考计算机操作试题,2018沧州市中考数学模拟试题【精编版含答案】
- MVC3学习第十五章 武林外传大结局
- java ATM查看余额_Java测试总结(ATM)
- CreateMutex用法详解
- ubuntu:窗口/终端最大化或者全屏快捷键设置