我們發現,如果有奇環顯然無解,因為我們每一次合併一個奇環,一定會產生一個偶環和一個更小的奇環,最終會形成一個三元環而無法合併

所以,這個圖需要是一個二分圖,需要進行二染色

然後把這個圖所有的偶環找出來,答案就是這些偶環的長度除以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的更多相关文章

  1. [Solution] JZOJ-5806 简单的操作

    [Solution] JZOJ-5806 简单的操作 题面 Description 从前有个包含n个点,m条边,无自环和重边的无向图. 对于两个没有直接连边的点u;v,你可以将它们合并.具体来说,你可 ...

随机推荐

  1. HHVM中文网

    HHVM中文网 百科资料 下载安装 HHVM文档 HHVM&Hack博客  <Hack与HHVM权威指南> 更多Facebook技术站 HHVM中文网 Facebook出品高性能服 ...

  2. 201621123008 《Java程序设计》第五周学习总结

    1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 关键词:接口,内部类. 1.2 尝试使用思维导图将这些关键词组织起来.注:思维导图一般不需要出现过多的字. 1.3 可选:使用常 ...

  3. laravel增删改查(查询构建器)

    1.增 $data = [ 'username' => 'xiaohong', 'nickname' => '小红红', 'email' => '12356788@qq.com', ...

  4. urlrewritefilter 本地windowsxp 上正常 使用 ,但是 到linux服务器 上 则时好时坏 ,不起作用

    可能原因: tuckey.org 无法正常访问 ,urlrewrite 配置 网络 dtd 无法下载 .. 先把 urlrewrite 日志 配置好: <filter> <filte ...

  5. sqoop 安装使用

    安装配置: 1.将sqoop-1.4.4.tar.gz 上传到/usr/local/ 2.解压 tar -zxvf sqoop-1.4.4.tar.gz 3.配置 vim /etc/profile 在 ...

  6. 函数数组demo

    #include <stdio.h> #include <string.h> typedef int(*service_func)(char *,char *); struct ...

  7. 【httpclient-4.3.1.jar】httpclient发送get、post请求以及携带数据上传文件

    1.发送get.post携带参数以及post请求接受JSON数据: package cn.qlq.utils; import java.io.BufferedReader; import java.i ...

  8. 卡特尔16PF性格测试与答案

    大学生在职业生涯规划时,必须充分注意到自己的性格和职业的适宜性.性格是指一个人在生活中形成的对现实的稳定的态度和行为方式.研究表明,性格影响着一个人的职业取向,由于性格的不同,每个人对工作和职业的态度 ...

  9. 2018.08.16 POJ1183反正切函数的应用(简单数学)

    传送门 代数变形一波. 显然有b,c>a. 那么这样的话可以令b=a+m,c=a+n. 又有a=(bc-1)/(b+c). 带入展开可知m*n=a*a+1. 要让m+n最小只需让m最大,这个结论 ...

  10. 2018.07.22 洛谷P1967 货车运输(kruskal重构树)

    传送门 这道题以前只会树剖和最小生成树+倍增. 而现在学习了一个叫做kruskal" role="presentation" style="position: ...