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

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

然後把這個圖所有的偶環找出來,答案就是這些偶環的長度除以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. PowerDesigner :

    P:是否为主键: F:是否为外键: M:表示强制非空: D:是否在模型中显示 修改样式.字体.颜色.等:Tools->Display Preferences->Format-> Po ...

  2. PAT 1020 月饼 (25)(精简版代码+思路+推荐测试用例)

    1020 月饼 (25)(25 分)提问 月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼.现给定所有种类月饼的库存量.总售价.以及市场的最大需求量,请你计算可以获得的最大收益是 ...

  3. Vue.js 生命周期的应用

    生命周期示意图 值得注意的几个钩子函数 activated 类型:Function 详细: keep-alive 组件激活时调用. 该钩子在服务器端渲染期间不被调用. 参考: 构建组件 - keep- ...

  4. iis 应用程序预热

    <applicationPools> <add name="appname" managedRuntimeVersion="v4.0" sta ...

  5. R 语言安装问题集锦

    R安装问题R CMD INSTALL -l /data1/jhh/envirment/R/R_lib /data1/jhh/software/qvalue_2.10.0.tar.gz 问题1 :con ...

  6. 外网不能访问阿里云服务器的apache服务

    今天弄了下Ubuntu的服务器,配置了一个LAMP环境的服务器,配置有时间我再来说 但是配置了很长的时间,差不都怕是好几个小时 在配置apache的时候,出现了问题,好不容易把apache服务配置好 ...

  7. Django入门与实践-第26章:个性化工具(完结)

    http://127.0.0.1:8000/boards/1/topics/62/reply/ 我觉得只添加内置的个性化(humanize)包就会很不错. 它包含一组为数据添加“人性化(human t ...

  8. c++ => new/delete

    new的具体使用方式如下: 类型 *变量名 = new 类型; delete 变量 / delete[] 变量; 类型包括数组.结构体和类 数组申请动态内存后,要使用delete[]才能把内存清除干净 ...

  9. try-catch+thows异常范围说明

    方式一: CatalogPO deleteTarget = null; /** 查询是否存在 **/ deleteTarget = catalogMapper.findByCatalogId(cata ...

  10. ExtJS+SpringMVC文件上传与下载

    说到文件上传.下载功能,网络上大多介绍的是采用JSP.SpringMVC或者Struts等开源框架的功能,通过配置达到文件上传.下载的目地.可是最近项目要用到文件上传与下载的功能,因为本项目框架采用开 ...