HDU 4738 双联通分量
来源:互联网 发布:易语言音效助手源码 编辑:程序博客网 时间:2024/04/29 17:14
点击打开链接
题意:给出一个无向图和每条边的权值,现在破坏一条路使得图不再联通,只能破坏一条路,问最少需要的花费,花费为边上的权值,注意的是,图刚开始可能不连通,输出1;花费最小的边为0输出1,其他没什么了
思路:求桥的模版题,在找到一个桥时更新费用最小,对了还有一个可能有重边,简单~~~
#include <vector>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <iostream>#include <algorithm>using namespace std;typedef long long ll;const int inf=0x3f3f3f3f;const int maxn=1010;struct edge{ int to,cost; edge(int a,int b){to=a;cost=b;}};vector<edge>G[maxn];int L[maxn],E[maxn],stack1[maxn],vis[maxn];int v[maxn][maxn],cnt,vv[maxn];int n,m,k,kk,max1,top;void dfs(int x,int fa){ vis[x]=1;L[x]=k;E[x]=k++; for(unsigned int i=0;i<G[x].size();i++){ edge e=G[x][i]; if(!vis[e.to]){ dfs(e.to,x); L[x]=min(L[x],L[e.to]); if(L[e.to]>E[x]&&v[x][e.to]==1){ max1=min(max1,e.cost); kk++; } }else if(e.to!=fa) L[x]=min(L[x],E[e.to]); }}int tarjan(){ k=0;kk=0;dfs(1,1); return kk;}void dfs1(int x){ vv[x]=1;cnt++; for(unsigned int i=0;i<G[x].size();i++){ edge e=G[x][i]; if(!vv[e.to]) dfs1(e.to); }}int main(){ int a,b,c; while(scanf("%d%d",&n,&m)!=-1){ if(n==0&&m==0) break; for(int i=0;i<maxn;i++){ G[i].clear();vis[i]=0;E[i]=0;vv[i]=0; } memset(v,0,sizeof(v)); for(int i=0;i<m;i++){ scanf("%d%d%d",&a,&b,&c); G[a].push_back(edge(b,c)); G[b].push_back(edge(a,c)); v[a][b]++;v[b][a]++; } cnt=0;max1=inf; dfs1(1); if(cnt!=n){ printf("0\n"); continue; } int ans=tarjan(); if(ans==0) printf("-1\n"); else if(max1==0) printf("1\n"); else printf("%d\n",max1); } return 0;}
0 0
- HDU 4738 双联通分量
- hdu 3394 图的双联通分量
- hdu 2242双联通分量+树形dp
- hdu 2242(边双联通分量)
- HDU 4005 边双联通分量
- HDU 5739 点-双联通分量
- hdu 5739(点双联通分量 )
- 浅谈强联通分量,双联通分量
- HDU 3836 强联通分量
- HDU 4635 强联通分量
- HDU 2767 强联通分量
- HDU 3639 强联通分量
- 双联通分量
- 边双联通分量
- 边双联通分量
- 点双联通分量
- 边双联通分量
- 双联通分量 HDU4738
- mysql报错处理
- html第二天div布局盒模型概念
- python 正则规则
- 推荐喜欢算法
- ubuntu系统设置问题
- HDU 4738 双联通分量
- 希尔排序的c语言实现代码
- DOO-SABIN 细分曲面(编辑中)
- 关于静态库添加图片资源的解决方案
- Leetcode - Rotate Array
- 屏幕滚动A-Z和条目字母变色
- 圆形图片
- C++语音识别接口快速入门(Microsoft Speech SDK)
- AWK详细用法