bzoj 1718: [Usaco2006 Jan] Redundant Paths 分离的路径
2017-11-29 13:25
309 查看
题意:
给一个连通无向图,问最少加多少条边使其变成边双连通图。题解:
将图边双缩点后就成了一棵树,于是问题就成了在一棵树中加多少条边能变成边双。显然最优是叶子节点两两连,所以是(叶子节点的个数+1)/2。
注意下特判根度数为一和已经是边双的情况。
code:
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> using namespace std; struct node{ int x,y,c,next; }a[20010],e[10010];int len=0,last[10010]; bool V[10010]; bool flag=false; int n,m,ans=0; int bel[5010],sta[5010],tp=0,id=0,cnt=0,dfn[5010],low[5010]; void ins(int x,int y,int c) { a[++len].y=y;a[len].c=c; a[len].next=last[x];last[x]=len; } void dfs(int x) { dfn[x]=low[x]=++id; sta[++tp]=x; for(int i=last[x];i;i=a[i].next) { if(V[a[i].c]) continue; V[a[i].c]=true; int y=a[i].y; if(dfn[y]==-1) { dfs(y); low[x]=min(low[x],low[y]); } else low[x]=min(low[x],dfn[y]); } if(low[x]==dfn[x]) { cnt++;int i; do{ i=sta[tp--]; bel[i]=cnt; }while(i!=x); } } void solve(int x,int fa) { int tot=0; for(int i=last[x];i;i=a[i].next) { int y=a[i].y; if(y==fa) continue; solve(y,x);tot++; } if(tot==0) ans++; if(x==bel[1]&&tot==1) ans++; } int main() { scanf("%d %d",&n,&m); for(int i=1;i<=m;i++) { int x,y;scanf("%d %d",&x,&y); ins(x,y,i);ins(y,x,i); e[i].x=x;e[i].y=y; } memset(V,false,sizeof(V)); memset(dfn,-1,sizeof(dfn)); dfs(1); len=0;memset(last,0,sizeof(last)); for(int i=1;i<=m;i++) { int x=e[i].x,y=e[i].y; if(bel[x]!=bel[y]) ins(bel[x],bel[y],0),ins(bel[y],bel[x],0); } if(len==0) {printf("0");return 0;} solve(bel[1],0); printf("%d",(ans+1)/2); }
相关文章推荐
- bzoj1718[Usaco2006 Jan] Redundant Paths 分离的路径 边双连通分量
- BZOJ1718: [Usaco2006 Jan] Redundant Paths 分离的路径
- BZOJ 1718 [Usaco2006 Jan] Redundant Paths 分离的路径 双联通分量
- BZOJ1718 [Usaco2006 Jan] Redundant Paths 分离的路径
- BZOJ 1718: [Usaco2006 Jan] Redundant Paths 分离的路径( tarjan )
- bzoj 1718: [Usaco2006 Jan] Redundant Paths 分离的路径【tarjan】
- bzoj 1718: [Usaco2006 Jan] Redundant Paths 分离的路径
- BZOJ1718 [Usaco2006 Jan] Redundant Paths 分离的路径
- BZOJ 1718: [Usaco2006 Jan] Redundant Paths 分离的路径
- 【BZOJ】1718: [Usaco2006 Jan] Redundant Paths 分离的路径
- [BZOJ1576][Usaco2009 Jan]安全路径Travel(堆优化dijkstra+并查集)
- 【BZOJ】1655: [Usaco2006 Jan] Dollar Dayz 奶牛商店(背包+高精度)
- 【BZOJ】1656:[Usaco2006 Jan]The Grove 树木(bfs+特殊的技巧)
- BZOJ 1655 [Usaco2006 Jan] Dollar Dayz 奶牛商店 完全背包
- bzoj 1654: [Usaco2006 Jan]The Cow Prom 奶牛舞会(Trajan)
- [BZOJ1656][Usaco2006 Jan] The Grove 树木(spfa)
- bzoj1720[Usaco2006 Jan]Corral the Cows 奶牛围栏
- bzoj1576[Usaco2009 Jan]安全路径Travel(堆优化dijkstra+并查集)
- bzoj 1655: [Usaco2006 Jan] Dollar Dayz 奶牛商店(高精度完全背包)
- 【次短路径/SPFA】BZOJ1726-[Usaco2006 Nov]Roadblocks第二短路