#749 (div1+div2) E. Moment of Bloom(生成树,欧拉回路)

Posted issue是fw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#749 (div1+div2) E. Moment of Bloom(生成树,欧拉回路)相关的知识,希望对你有一定的参考价值。

Link

考虑 u u u点在 q q q次询问中出现次数为奇数次

那必定无法使所有边经过偶数次,因为 u u u的邻边被经过了奇数次,邻边就必然有一条边被经过奇数次

考虑所有点在 q q q次询问中都出现了偶数次,那么建一颗生成树

我们断言,对于询问 u , v u,v u,v只需从 u u u在树上走到 v v v即可满足最后每条边经过偶数次

考虑构造一张新图,对于询问 ( u , v ) (u,v) (u,v)在新图上由点 u u u向点 v v v连一条边

这样新图形成若干个连通分量,考虑每个连通分量的度数都是偶数

这么这个连通分量必定存在欧拉回路,从起点出发必定回到终点

所以在新图的欧拉回路的路径上由 u u u走到 v v v,对应的就在生成树上从 u u u走到 v v v

最后返回起始点的时候,因为是在树上走,所以相当于抵消了之前走的所有奇数边

所以这么构造是合法的.

于是当询问的点不全为偶数时,我们记录奇数点的个数 x x x,显然需要添加 x 2 \\frac{x}{2} 2x个询问让这些点的度数变为偶数

#include <bits/stdc++.h>
using namespace std;
const int maxn = 3e5+10;
int n,m,fa[maxn],L[maxn],R[maxn],in[maxn],vis[maxn],pre[maxn];
vector<int>vec[maxn],fg;
int find(int x){ return x==fa[x]?x:fa[x] = find( fa[x] );}
void dfs(int u,int s,int shu)
{
	if( u==s )	cout << shu << endl << u << " ";
	else
	{
		dfs( pre[u],s,shu+1 );
		cout << u << " ";
	}
}
void bfs(int s,int t)
{
	for(int i=1;i<=n;i++)	vis[i] = 0;	 
	queue<int>q; q.push( s );
	while( !q.empty() )
	{
		int u = q.front(); q.pop();
		if( u==t )
		{
			dfs( t,s,1 ); cout << endl;
			return;
		}
		for(auto v:vec[u] )
		{
			if( vis[v] )	continue;
			vis[v] = 1, pre[v] = u, q.push( v );
		}
	}
}
signed main()
{
	cin >> n >> m;
	for(int i=1;i<=n;i++)	fa[i] = i;
	for(int i=1;i<=m;i++)
	{
		int l,r; cin >> l >> r;
		int fl = find( l ), fr = find( r );
		if( fl==fr )	continue;
		vec[l].push_back( r ); vec[r].push_back( l );
		fa[fl] = fr;
	}
	int q; cin >> q;
	for(int i=1;i<=q;i++)
	{
		cin >> L[i] >> R[i];
		in[L[i]]++; in[R[i]]++;
	}
	for(int i=1;i<=n;i++)
		if( in[i]&1 )	fg.push_back( i );
	if( fg.size() )	cout << "NO\\n" << fg.size()/2;
	else
	{
		cout << "YES\\n";
		for(int i=1;i<=q;i++)	bfs( L[i],R[i] );
	}
}

以上是关于#749 (div1+div2) E. Moment of Bloom(生成树,欧拉回路)的主要内容,如果未能解决你的问题,请参考以下文章

springboot页面部分刷新,比如同一个html页面的div1,div2,div1中放查询条件?

CodeForces875C[拓扑排序] Codeforces Round #440 [DIV2E/DIV1C]

codeforces round#509(div2) E. Tree Reconstruction

css/javascript 一个div包含两个样式class="div1 div2"用javascript修改其中一个样式的内容

一个div如何浮在另一个div之上?

Codeforces #495 Div2 problem E. Sonya and Ice Cream(1004E)