jzoj5806
我們發現,如果有奇環顯然無解,因為我們每一次合併一個奇環,一定會產生一個偶環和一個更小的奇環,最終會形成一個三元環而無法合併
所以,這個圖需要是一個二分圖,需要進行二染色
然後把這個圖所有的偶環找出來,答案就是這些偶環的長度除以2,這樣子很難
然而我們發現,偶環上的任意兩個點的最大距離的最短值一定等於偶環長度除以2,所以找出上一問等價于找出最短路的最大值,進行bfs即可
但是有可能有多個聯通塊,所以我們可以尋找所有聯通塊中的最短路徑的最大值即可
代碼:
#include<bits/stdc++.h>
using namespace std;
int v[200010],nxt[200010],h[100010],ec,n,m,col[100010],vis[100010],st[100010],ct,ok,d[1010],p[100010],r;
void add(int x,int y){v[++ec]=y;nxt[ec]=h[x];h[x]=ec;}
void dfs(int x){
vis[x]=1;st[++ct]=x;
for(int i=h[x];i;i=nxt[i]){
if(!vis[v[i]]){
col[v[i]]=!col[x];
dfs(v[i]);
}
else if(vis[v[i]]&&col[v[i]]==col[x])ok=0;
}
}
int main(){
freopen("merge.in","r",stdin);
freopen("merge.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
int x,y;
scanf("%d%d",&x,&y);
add(x,y);add(y,x);
}
for(int i=1;i<=n;i++)if(!vis[i]){
ok=1;int ans=0;
dfs(i);
if(!ok){
printf("-1");
return 0;
}
queue<int>q;
for(int j=1;j<=ct;j++){
memset(d,127,sizeof(d));
q.push(st[j]);
d[st[j]]=0;
while(!q.empty()){
int x=q.front();q.pop();
ans=max(ans,d[x]);
for(int k=h[x];k;k=nxt[k])
if(d[v[k]]>d[x]+1){
d[v[k]]=d[x]+1;
q.push(v[k]);
}
}
}
r+=ans;
ct=0;
}
printf("%d",r);
}
jzoj5806的更多相关文章
- [Solution] JZOJ-5806 简单的操作
[Solution] JZOJ-5806 简单的操作 题面 Description 从前有个包含n个点,m条边,无自环和重边的无向图. 对于两个没有直接连边的点u;v,你可以将它们合并.具体来说,你可 ...
随机推荐
- Laravel 本地化定义
1.配置本地化语言Laravel 的本地化语言配置项位于config/app.php: [php] view plain copy 'locale' => 'zh',//当前语言 'fallba ...
- paxos 分布一致性算法的一些资料
http://blog.csdn.net/russell_tao/article/details/7238783 技术牛人博客 三国背景来讲述分布一致性算法 此人还是NGINX的代码解析 <深入 ...
- part1:10-TFTP与NFS服务器配置
1.交叉开发 嵌入式系统开发多采用交叉开发模式,所谓嵌入式交叉开发就是指在宿主机上进行程序的编写,然后通过交叉编译生成目标机平台可以运行的二进制代码,最后再下载到目标平台上的特定位置运行.产生嵌入式软 ...
- display:grid
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 将IP地址转化为整数
$ip = 'IP地址';echo $intip = sprintf('%u',ip2long($ip)); //转换为无符号整型echo long2ip($intip);//将整型转换为ip
- Java实现浏览器端大文件分片上传
版权所有 2009-2018荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/up6.2/in ...
- QGIS 2014年7月18日版本
4. Building on Windows 4.1. Building with Microsoft Visual Studio This section describes how to buil ...
- afx_msg解释
以前一直不知道AFX_MSG是什么意思,只是觉得它应该是个消息映射函数,但是具体代表什么意思,会返回一个什么样的值是一点都不清楚,今天查了下资料,把查到的东西放这,以免以后忘了还得再查. 在头文件(D ...
- no_namespace rename 在C++中是什么意思啊
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("E ...
- Java 容器 LinkedHashMap源码分析2
一.类签名 LinkedHashMap<K,V>继承自HashMap<K,V>,可知存入的节点key永远是唯一的.可以通过Android的LruCache了解LinkedHas ...