題意是幾筆可以畫完所給的圖,其中沒有與其他點連同的不需要考慮。
先用並查集將點分成不同的集合,由於題目是問幾筆,所以不用考慮連通性。只需要考慮不同集合根節點中記錄的這個集合奇度節點的個數,如果是零,最後答案加一,反之加上除二後的結果。
#include
#include
#include
using
namespace
std;
const
int n=150000+5;
int n,m,p[n],ans,in[n],odd[n],even[n];
int find(int x)
void union(int a,int b)
int main()
for(i=0;iscanf("%d%d",&u,&v);
u--;
v--;
union(u,v);
in[u]++;
in[v]++;
}for(i=0;iint f=find(i);
if(in[i]==0) continue;
if(in[i]%2==0) even[f]++;
else odd[f]++;
}ans=0;
for(i=0;iif(p[i]!=i||!in) continue;
if(odd[i]==0&&even[i]==0) continue;
else
if(odd[i]==0) ans++;
else ans+=odd[i]/2;
}printf("%d\n",ans);
}return
0;}
尤拉路徑 hdu 3018 Ant Trip
給定乙個無向圖,每條邊只走一次,可以有多個出發點,最多要多少個出發點?不考慮孤立點 即找至少需要多少個尤拉路徑 首先判斷聯通分量。再在每個連通分量中,奇數度點個數為0,需要出發點1個 尤拉迴路 奇數度點位非0個 記為cnt 需要出發點cnt 2個 乙個連通圖 無向圖 中,奇數度點的個數為偶數個。證明...
HDU 3018 Ant Trip 尤拉迴路
一筆畫問題,問需要多少筆才能把邊畫完,如果乙個連通分量是尤拉迴路 所有點的度數都是偶數,對於無向圖來說 那麼這個連通分量可以一筆畫完,如果乙個連通分量不是尤拉迴路,那麼需要的筆畫數是這個連通分量中奇數度數點的個數除以2。孤立點不連邊,顯然不考慮。include include include inc...
HDU 3018 AntTrip 尤拉迴路
題目連線 vjandhdu 給乙個無向圖,一條路只能走一次,問幾次能盡可能走完全圖 也就是一筆畫,問幾筆畫完全圖 不存在單獨存在 n 個節點的情況 公式 連線一張圖連線需要的筆數 奇數度節點個數 2 尤拉迴路 include using namespace std define rg registe...