题目传送门:Kattis - hoppers  Hoppers

题目大意:

你是一个黑客,现在你发明了一种感染病毒,这种感染病毒能够感染到与该主机相隔一个点的主机。

存在一个无向图,每个点代表一台主机,每条无向边表示两台主机相连,现在你有个计划是通过感

染一个电脑让所有电脑感染,你可以为两条电脑之间加边,需要你求出最少加多少条边能够完成计划

分析:

我们能够发现奇数环中任何一个点被感染都能够使奇数环中所有的点感染。因此我们可以利用该性质。

为了满足条件(感染一个点使所有点被感染)存在几种情况:

1.如果存在不连通的一个奇数环和一个偶数环:需要加一条边,将奇数环和偶数环相连即可

2.如果存在两个不联通的奇数环:需要加一条边

3.如果存在两个不连通的偶数环:需要加两条边:一条边将两个偶数环联通,一条边加进任意一个偶数环中

构成一个奇数环。

因此我们可以得出这题的解法:通过dfs判断存在多少个联通块,如果存在n个联通块则需要n-1条边将所有联通

块连接。再每次进行dfs时判断,每个联通块中是否存在奇数环,如果存在奇数环则无需另外加一条边,否则加一条边

代码:

#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
#include<cmath>
using namespace std;
const int MAX=500009;
int n,m,u,v;
vector<int>G[MAX];
int vis[MAX];
int odd=1;
bool dfs(int u,int val)
{vis[u]=val;for(int i=0;i<G[u].size();i++){int v=G[u][i];if(!vis[v])dfs(v,val+1);else if((abs(vis[u]-vis[v])+1)%2!=0)odd=0;        //存在奇数环
    }
}
int main()
{scanf("%d%d",&n,&m);for(int i=0;i<m;i++){scanf("%d%d",&u,&v);G[u].push_back(v);G[v].push_back(u);}int ans=0;for(int i=1;i<=n;i++){if(!vis[i]){dfs(i,1);ans++;        //记录存在多少个联通块
        }    }printf("%d\n",ans-1+odd);return 0;
} 

转载于:https://www.cnblogs.com/LjwCarrot/p/10739594.html

Kattis - hoppers Hoppers(判奇环)相关推荐

  1. poj2942 圆桌骑士(点双连通分量+二分图染色法判奇环)

    题意:一些骑士,他们有些人之间有矛盾,现在要求选出一些骑士围成一圈,圈要满足如下条件:1.人数大于1.2.总人数为奇数.3.有仇恨的骑士不能挨着坐.问有几个骑士不能和任何人形成任何的圆圈. 分析:图论 ...

  2. 牛客-紫魔法师(仙人掌染色-判奇环)

    题目链接:https://ac.nowcoder.com/acm/contest/7016/F 博客园食用链接:https://www.cnblogs.com/lonely-wind-/p/13530 ...

  3. POJ 2942 Knights of the Round Table 【点双联通 + 二分图染色法判奇环】

    传送门 亚瑟王要在圆桌上召开骑士会议,为了不引发骑士之间的冲突,并且能够让会议的议题有令人满意的结果,每次开会前都必须对出席会议的骑士有如下要求: 1. 相互憎恨的两个骑士不能坐在直接相邻的2个位置: ...

  4. 【10.20校内测试】【小模拟】【无向图建树判奇偶环】【树上差分】

    Solution 和后面两道题难度差距太大了吧!! 显然就只是个小模拟,注意判0就行了. Code #include<bits/stdc++.h> using namespace std; ...

  5. 算法提高课-图论-负环-AcWing 1165. 单词环:spfa判正环、二分、01分数规划

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 如何建图? 这样建图.以样例举例.起点是前两个字母,终点是末尾两个字母,边权是字符串的长度. 我们求的是什么呢? 题目要求Σ边权Σ1 ...

  6. 算法提高课-图论-负环-AcWing 361. 观光奶牛:spfa判正环、负环、01分数规划、二分

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 题目要求ΣfiΣgi\frac{\Sigma{f_i}}{\Sigma{g_i}}Σgi​Σfi​​的最大值,这种问题称为01分数规 ...

  7. poj 2049(二分+spfa判负环)

    poj 2049(二分+spfa判负环) 给你一堆字符串,若字符串x的后两个字符和y的前两个字符相连,那么x可向y连边.问字符串环的平均最小值是多少.1 ≤ n ≤ 100000,有多组数据. 首先根 ...

  8. 【2019icpc南京站网络赛 - H】Holy Grail(最短路,spfa判负环)

    题干: As the current heir of a wizarding family with a long history,unfortunately, you find yourself f ...

  9. BZOJ3597 [Scoi2014]方伯伯运椰子 【二分 + 判负环】

    题目链接 BZOJ3597 题解 orz一眼过去一点思路都没有 既然是流量网络,就要借鉴网络流的思想了 我们先处理一下那个比值,显然是一个分数规划,我们二分一个\(\lambda = \frac{X ...

  10. POJ 2240 Arbitrage(SPFA判正环)

    POJ 2240 Arbitrage 题目大意 套利是指利用货币汇率的差异,将一种货币的一个单位转换为同一货币的多个单位.例如,假设1美元买0.5英镑,1英镑买10.0法国法郎,1法国法郎买0.21美 ...

最新文章

  1. Science论文:诺奖经济学家的经典决策模型,被AI挑战
  2. python3模块socket怎么安装_Python中socket模块的使用方法(一)
  3. 竖直手风琴导航菜单栏
  4. Unix传奇(下篇)
  5. 【转载】煤层气大事记
  6. mac上安装webpack报错解决方法Hit error EACCES: permission denied, mkdir ‘/usr/local/lib/node_modules/webpack
  7. hyperledger部署java_Hyperledger Fabric(超级账本) Java 开发区块链 部署运行智能合约
  8. OpenCV精进之路(七):图像变换——重映射与仿射变换
  9. gatedata graph digitier 基本使用
  10. 推荐一个基于Spring Boot + Vue的实习管理系统
  11. WinMTR 0.9.2 绿色免费版
  12. win10服务器只显示4g内存,要注意了,4G内存在win10系统中根本不够用
  13. 守望轮回谷等待服务器响应,《守望轮回谷》即将接班自走棋?Dota2新地图再次掀起热潮...
  14. DVWA靶机-存储型XSS漏洞(Stored)
  15. 用python 判断一个单链表是否有环
  16. 三极管基极下拉电阻作用
  17. 第二十章 Caché 命令大全 QUIT 命令
  18. 对flash cs5的展望
  19. RPC编程:Hessian RPC一个老的RPC框架(一)
  20. Unity Serialize总结

热门文章

  1. 计算机设备属于什么会计科目,​机器设备属于什么会计科目
  2. Netty+WebSocket服务器完成Web聊天室(纯文字)
  3. pkuseg 和 jieba 分词对比测试,结果出乎意料...
  4. Drupal主题开发
  5. 香港服务器哪家好?香港机房前十排名
  6. HHUOJ 1050: 屁屁上的巴掌
  7. css text-transform实现英文字母或拼音大小写转换
  8. 计算机毕业设计论文——国内外文献查找网站
  9. 垃圾分类催生创业公司
  10. 黑苹果完整安装教程,内含后续系统优化