給出乙個有向圖,要求給每條邊重定向,使得定向後出度等於入度的點最多,輸出答案和任意一種方案.
\(n≤10^5,m≤3*10^5, xi,yi≤n\)
考慮先當每條邊雙向。
如果這個圖的所有點的度都是偶數,那麼尤拉路徑跑一下就行了
考慮度為奇數的點:連線所有度為奇數的點,使其成為偶數點,顯然不會影響正確性
留個坑。。這個演算法的總結。。。
沒有過程。。
const int n=100010,m=600010;
int n,m;
int head[n],nxt[m<<1],to[m<<1],vis[m<<1],lst=1;
int cur[n];
int in[n];
inline void adde(int x,int y)
bool used[n];
int sta[m<<1],top=0;
void dfs(int u)
}inline void fluery(int s)
if(can) dfs(u); }}
int seq[n],tot;
signed main()
for(int i=1;i<=n;i++)
if(in[i]&1)
int ans=n-tot;
for(int i=1;i<=tot;i+=2)
memcpy(cur,head,sizeof(head));
for(int i=1;i<=n;i++)
if(!used[i]) fluery(i);
printf("%d\n",ans);
for(int i=1;i<=m;i++)
return 0;
}
用時:15min(不算學演算法) 51Nod1967 路徑定向
給出乙個有向圖,要求給每條邊重定向,使得定向後出度等於入度的點最多,輸出答案和任意一種方案 input 第一行兩個正整數n,m,表示1 n號點與m條邊 接下來m行,每行兩個正整數xi,yi,表示存在一條有向邊從xi指向yi n 10 5,m 3 10 5,xi,yi n output 第一行乙個整數...
51nod1967 路徑定向(尤拉迴路 結論題)
看到入度等於出度想到尤拉迴路。我們把邊都變成無向邊,有乙個結論是偶數度的點都可以變成出入度相等的點,而奇數點的不行,感性理解分類討論一下就知道是對的。還有乙個更好理解的結論是變成無向邊後奇數點的個數一定只有偶數個,因為有乙個奇數點就一定有另乙個跟他對應。那麼我們把奇數點湊成對連邊,這樣奇數點也變成了...
1967 路徑定向
給出乙個有向圖,要求給每條邊重定向,使得定向後出度等於入度的點最多,輸出答案和任意一種方案 input 第一行兩個正整數n,m,表示1 n號點與m條邊 接下來m行,每行兩個正整數xi,yi,表示存在一條有向邊從xi指向yi n 10 5,m 3 10 5,xi,yi noutput 第一行乙個整數a...