• 【CF527E】Data Center Drama(欧拉回路)


    点此看题面

    • 给定一张(n)个点(m)条边的图,要求在加入尽量少的边后给边定向,使得所有点入度出度都为偶数。
    • (nle10^5,mle2 imes10^5)

    欧拉回路构造

    发现一个点入度出度都为偶数,那么它的总度数就更为偶数,也就是说这张图必然存在欧拉回路

    所以说,要加入尽量少的边,只要给度数为奇数的点两个一组配对连边,然后若(m)为奇数则再任选一个点添上一个自环,就可以保证这张图存在合法解了。

    而要构造一组方案,直接跑欧拉回路,隔一条边便换一个方向连边即可。

    代码:(O(n+m))

    #include<bits/stdc++.h>
    #define Tp template<typename Ty>
    #define Ts template<typename Ty,typename... Ar>
    #define Reg register
    #define RI Reg int
    #define Con const
    #define CI Con int&
    #define I inline
    #define W while
    #define N 100000
    #define M 300000
    #define add(x,y) (e[++ee].nxt=lnk[x],e[lnk[x]=ee].to=y)
    using namespace std;
    int n,m,d[N+5],ee,lnk[N+5];struct edge {int to,nxt;}e[2*M+5];
    namespace FastIO
    {
    	#define FS 100000
    	#define tc() (FA==FB&&(FB=(FA=FI)+fread(FI,1,FS,stdin),FA==FB)?EOF:*FA++)
    	#define pc(c) (FC==FE&&(clear(),0),*FC++=c)
    	int OT;char oc,FI[FS],FO[FS],OS[FS],*FA=FI,*FB=FI,*FC=FO,*FE=FO+FS;
    	I void clear() {fwrite(FO,1,FC-FO,stdout),FC=FO;}
    	Tp I void read(Ty& x) {x=0;W(!isdigit(oc=tc()));W(x=(x<<3)+(x<<1)+(oc&15),isdigit(oc=tc()));}
    	Ts I void read(Ty& x,Ar&... y) {read(x),read(y...);}
    	Tp I void write(Ty x) {W(OS[++OT]=x%10+48,x/=10);W(OT) pc(OS[OT--]);pc(' ');}
    	Tp I void writeln(Ty x) {W(OS[++OT]=x%10+48,x/=10);W(OT) pc(OS[OT--]);pc('
    ');}
    }using namespace FastIO;
    int op,vis[M+5];I void Euler(CI x) {RI y;for(RI& i=lnk[x];i;i=e[i].nxt)//跑欧拉回路
    	!vis[i+1>>1]&&(vis[i+1>>1]=1,Euler(y=e[i].to),(op^=1)?(write(x),writeln(y)):(write(y),writeln(x)),0);}//隔一条边换一个方向
    int main()
    {
    	RI i,x,y;for(read(n,m),i=1;i<=m;++i) read(x,y),add(x,y),add(y,x),d[x]^=1,d[y]^=1;
    	RI t=0;for(i=1;i<=n;++i) d[i]&&(t?(++m,add(t,i),add(i,t),t=0):t=i);m&1&&(++m,add(1,1),add(1,1));//保证每个点度数为偶数且总边数为偶数
    	writeln(m),Euler(1);return clear(),0;
    }
    
    败得义无反顾,弱得一无是处
  • 相关阅读:
    Centos开启FTP及用户配置
    mysql update from 子查询
    sql server 查询表某个字段不重复数据
    ASP.NET 获取来源网站的网址,获取上一网页的网址,获取来源网页的URL,获取上一网页的URL
    Warning: Invalid argument supplied for foreach()
    不支持关键字: “userid”。
    apache301重定向设置
    service httpd restart失败解决方法(小记)
    JavaWeb(一)
    jquery中filter的用法
  • 原文地址:https://www.cnblogs.com/chenxiaoran666/p/CF527E.html
Copyright © 2020-2023  润新知