HDU-4738 Caocao's Bridges 边联通分量
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4738
题意:在有重边的无向图中,求权值最小的桥。
注意trick就好了,ans为0时输出1,总要有一个人去丢炸弹吧。。。
- //STATUS:C++_AC_62MS_8144KB
- #include <functional>
- #include <algorithm>
- #include <iostream>
- //#include <ext/rope>
- #include <fstream>
- #include <sstream>
- #include <iomanip>
- #include <numeric>
- #include <cstring>
- #include <cassert>
- #include <cstdio>
- #include <string>
- #include <vector>
- #include <bitset>
- #include <queue>
- #include <stack>
- #include <cmath>
- #include <ctime>
- #include <list>
- #include <set>
- #include <map>
- using namespace std;
- #pragma comment(linker,"/STACK:102400000,102400000")
- //using namespace __gnu_cxx;
- //define
- #define pii pair<int,int>
- #define mem(a,b) memset(a,b,sizeof(a))
- #define lson l,mid,rt<<1
- #define rson mid+1,r,rt<<1|1
- #define PI acos(-1.0)
- //typedef
- typedef __int64 LL;
- typedef unsigned __int64 ULL;
- //const
- const int N=;
- const int INF=0x3f3f3f3f;
- const int MOD=,STA=;
- const LL LNF=1LL<<;
- const double EPS=1e-;
- const double OO=1e60;
- const int dx[]={-,,,};
- const int dy[]={,,,-};
- const int day[]={,,,,,,,,,,,,};
- //Daily Use ...
- inline int sign(double x){return (x>EPS)-(x<-EPS);}
- template<class T> T gcd(T a,T b){return b?gcd(b,a%b):a;}
- template<class T> T lcm(T a,T b){return a/gcd(a,b)*b;}
- template<class T> inline T lcm(T a,T b,T d){return a/d*b;}
- template<class T> inline T Min(T a,T b){return a<b?a:b;}
- template<class T> inline T Max(T a,T b){return a>b?a:b;}
- template<class T> inline T Min(T a,T b,T c){return min(min(a, b),c);}
- template<class T> inline T Max(T a,T b,T c){return max(max(a, b),c);}
- template<class T> inline T Min(T a,T b,T c,T d){return min(min(a, b),min(c,d));}
- template<class T> inline T Max(T a,T b,T c,T d){return max(max(a, b),max(c,d));}
- //End
- /* Edge-Biconnected Component(可以处理重边)
- iscut[]为割边集
- bccno[]为双连通点集,保存为编号 */
- struct Edge{
- int u,v,w;
- }e[*N*N];
- bool iscut[*N*N];
- int first[N],next[*N*N],pre[N],low[N],bccno[N];
- int n,m,mt,bcnt,dfs_clock;
- stack<int> s;
- void adde(int a,int b,int c)
- {
- e[mt].u=a;e[mt].v=b;e[mt].w=c;
- next[mt]=first[a];first[a]=mt++;
- e[mt].u=b;e[mt].v=a;e[mt].w=c;
- next[mt]=first[b];first[b]=mt++;
- }
- void dfs(int u,int fa)
- {
- int i,v;
- pre[u]=low[u]=++dfs_clock;
- s.push(u);
- int cnt=;
- for(i=first[u];i!=-;i=next[i]){
- v=e[i].v;
- if(!pre[v]){
- dfs(v,u);
- low[u]=Min(low[u],low[v]);
- if(low[v]>pre[u])iscut[i]=true; //存在割边
- }
- else if(fa==v){ //反向边更新
- if(cnt)low[u]=Min(low[u],pre[v]);
- cnt++;
- }
- else low[u]=Min(low[u],pre[v]);
- }
- if(low[u]==pre[u]){ //充分必要条件
- int x=-;
- bcnt++;
- while(x!=u){
- x=s.top();s.pop();
- bccno[x]=bcnt;
- }
- }
- }
- int find_bcc()
- {
- int i,cnt=;
- bcnt=dfs_clock=;
- mem(pre,);mem(bccno,);mem(iscut,);
- for(i=;i<=n;i++){
- if(!pre[i]){cnt++;dfs(i,-);}
- }
- return cnt;
- }
- int main(){
- // freopen("in.txt","r",stdin);
- int i,j,a,b,c,ans,t;
- while(~scanf("%d%d",&n,&m) && (n||m))
- {
- mem(first,-);mt=;
- for(i=;i<m;i++){
- scanf("%d%d%d",&a,&b,&c);
- adde(a,b,c);
- }
- t=find_bcc();
- if(t>){
- printf("0\n");
- continue;
- }
- ans=INF;
- for(i=;i<mt;i++){
- if(iscut[i])ans=Min(ans,e[i].w);
- }
- printf("%d\n",ans==INF?-:(ans?ans:));
- }
- return ;
- }
HDU-4738 Caocao's Bridges 边联通分量的更多相关文章
- Hdu 4738 Caocao's Bridges (连通图+桥)
题目链接: Hdu 4738 Caocao's Bridges 题目描述: 有n个岛屿,m个桥,问是否可以去掉一个花费最小的桥,使得岛屿边的不连通? 解题思路: 去掉一个边使得岛屿不连通,那么去掉的这 ...
- HDU 4738 Caocao's Bridges(Tarjan求桥+重边判断)
Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU 4738——Caocao's Bridges——————【求割边/桥的最小权值】
Caocao's Bridges Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- hdu 4738 Caocao's Bridges 图--桥的判断模板
Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU 4738 Caocao's Bridges
Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU 4738 Caocao's Bridges (2013杭州网络赛1001题,连通图,求桥)
Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU——4738 Caocao's Bridges
Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU 4738 Caocao's Bridges ——(找桥,求联通块)
题意:给你一个无向图,给你一个炸弹去炸掉一条边,使得整个图不再联通,你需要派人去安置炸弹,且派去的人至少要比这条边上的人多.问至少要派去多少个,如果没法完成,就输出-1. 分析:如果这个图是已经是多个 ...
- hdu 4738 Caocao's Bridges (tarjan求桥)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4738 题目大意:给一些点,用一些边把这些点相连,每一条边上有一个权值.现在要你破坏任意一个边(要付出相 ...
- hdu 4738 Caocao's Bridges(桥的最小权值+去重)
http://acm.hdu.edu.cn/showproblem.php?pid=4738 题目大意:曹操有一些岛屿被桥连接,每座都有士兵把守,周瑜想把这些岛屿分成两部分,但他只能炸毁一条桥,问最少 ...
随机推荐
- JDBC学习总结(五)
取得数据库连接是件耗时间及资源的动作,尽量利用已打开的连接,也就是重复利用取得的Connection实例,是改善数据库连接性能的一个方式,而采用连接池是基本做法.由于取得Connection的方式根据 ...
- jquery.post用法
使用ajax在前端验证是否执行某个操作 jquery.post参数为 url,[data],[callback],[type] url:发送请求地址. data:待发送 Key/value 参数. c ...
- 车牌识别LPR(三)-- LPR系统整体结构
第三篇:系统的整体架构 LPR系统大体上可由图像采集系统,图像处理系统,数据库管理系统三个子系统组成.它综合了通讯.信息.控制.传感.计算机等各种先进技术,构成一个智能电子系统. 图像采集系统:图像采 ...
- LTDFZ
开关稳压器
- ASP.NET MVC从客户端中检测到有潜在危险的 Request.Form 值
ASP.NET MVC4(Razor)从客户端中检测到有潜在危险的 Request.Form 值 “/”应用程序中的服务器错误. 从客户端(Content=" sdfdddd ...&quo ...
- directdraw显示yuv视频,出现屏保时,yuv显示不出来,表面丢失
原因是: DDrawSurface 丢失, DDraw表面在很多情况下都会丢失(如:启动其他全屏独占程序,屏保,或锁屏时), 表面丢失其实就是表面所使用的内存或显存被DirectDraw系统释放, 分 ...
- 动态加载so文件
在开发过程中,经常会用到第三方库,比如地图.视频.文档编辑.图表之类.依赖这些库,需要添加其SDK,有时需要用到jni层的So文件,比如百度地图等. 那么问题来了,如果两个不同的库之间的so文件发生冲 ...
- javascript一些有用但又不常用的特性
1.onclick="save();return false;" 取消“浏览器默认行为”. 比如一个链接 <a href="http://zhida ...
- js时间日期转时间戳
var contractstarttimea='2016-01-01'; var contractendtimea='2016-05-01'; var contractstart = Date.par ...
- PL/Sql 中创建、调试、调用存储过程
存储过程的详细建立方法 1.先建存储过程 左边的浏览窗口选择 procedures ,会列出所有的存储过程,右击文件夹procedures单击菜单"new",弹出 template ...