noip模擬63(待補)
阿新 • • 發佈:2021-09-28
「電壓機制·括號密碼·排列·B關係」
A. 電壓機制
題目可以迅速轉化為:刪掉一條邊使得圖變為一個二分圖.
然而這並沒有什麼用..
另外可以發現我們必須刪掉一條邊,這條邊滿足是所有奇環的公共邊,而且不能是偶環的邊.
所以可以考慮差分實現.
A_code
#include<bits/stdc++.h> using namespace std; namespace BSS { #define ll long long int #define ull unsigned ll #define lf double #define lbt(x) (x&(-x)) #define mp(x,y) make_pair(x,y) #define lb lower_bound #define ub upper_bound #define Fill(x,y) memset(x,y,sizeof x) #define Copy(x,y) memcpy(x,y,sizeof x) #define File(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout) inline ll read() { ll res=0; bool cit=1; char ch; while(!isdigit(ch=getchar())) if(ch=='-') cit=0; while(isdigit(ch)) res=(res<<3)+(res<<1)+(ch^48),ch=getchar(); return cit?res:-res; } } using namespace BSS; const ll N=5e5+21; ll m,n,ans,ts=1,cnt,alls; ll head[N],odd[N],cf[N],dep[N]; struct I { ll u,v,nxt,vis; } e[N<<2]; inline void add(ll u,ll v){ e[++ts].u=u,e[ts].v=v,e[ts].nxt=head[u], head[u]=ts; } void dfs(ll u,ll depth){ dep[u]=depth; for(int i=head[u];i;i=e[i].nxt){ if(e[i].vis) continue; e[i].vis=1,e[i^1].vis=1; if(dep[e[i].v]){ ll len=dep[u]-dep[e[i].v]+1; if(len&1){ odd[i]++,odd[i^1]++; cf[e[i].v]--; alls++; } else{ odd[i]--,odd[i^1]--; cf[e[i].v]++; } cf[u]+=odd[i]; } else{ dfs(e[i].v,depth+1); odd[i]+=cf[e[i].v],odd[i^1]+=cf[e[i].v]; cf[u]+=cf[e[i].v]; } } } signed main(){ File(a); n=read(),m=read(); ll u,v; for(int i=1;i<=m;i++){ u=read(),v=read(); add(u,v),add(v,u); } dfs(1,1); for(int i=2;i<=ts;i+=2) ans+=(odd[i]==alls); printf("%lld\n",ans),exit(0); }