[HDU4738]Caocao's Bridges(求割边最小权值)

http://acm.hdu.edu.cn/showproblem.php?pid=4738

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1e3+4,maxm=1e6+4;
int dfn[maxn],low[maxn],head[maxn];
int n,m,cnt=0,rt,ans,tim;
struct node{
    int to,next,w;
}e[maxm<<1];
inline void add(int u,int v,int w){
    e[cnt].to=v;e[cnt].next=head[u];head[u]=cnt;e[cnt].w=w;cnt++;
}
inline void tarjan(int u,int pre){
    dfn[u]=low[u]=++tim;
    for(int i=head[u];i!=-1;i=e[i].next){
        if(i==(pre^1)) continue;
        int v=e[i].to;
        if(!dfn[v]) {
            tarjan(v,i);
            low[u]=min(low[u],low[v]);
            if(low[v]==dfn[v]){
                ans=min(ans,e[i].w);
            }
        }else low[u]=min(low[u],dfn[v]);
    }
}
int main(){
    while(scanf("%d%d",&n,&m)!=EOF){
        if(n==0&&m==0) return 0;
        cnt=0;tim=0;ans=0x3f3f3f3f;
        memset(head,-1,sizeof(head));
        memset(dfn,0,sizeof(dfn));
        memset(low,0,sizeof(low));
        memset(e,0,sizeof(e));
        for(int i=1;i<=m;i++){
            int u,v,w;scanf("%d%d%d",&u,&v,&w);
            add(u,v,w);add(v,u,w);
        }
        int flag=0;
        for(int i=1;i<=n;i++){
            if(!dfn[i]) {
                if(flag) {ans=-1;break;}
                flag=1;
                tarjan(i,0x3f3f3f3f);
            }
        }
        if(ans==-1) printf("0\n");
        else if(ans==0) printf("1\n");
        else if(ans==0x3f3f3f3f) printf("-1\n");
        else printf("%d\n",ans);
    }
}

[HDU4738]Caocao's Bridges(求割边最小权值)

原文地址:https://www.cnblogs.com/wifimonster/p/10226659.html

时间: 2024-11-12 20:58:28

[HDU4738]Caocao's Bridges(求割边最小权值)的相关文章

hdu1599 find the mincost route floyd求出最小权值的环

find the mincost route Time Limit: 1000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3456    Accepted Submission(s): 1409 Problem Description 杭 州有N个景区,景区之间有一些双向的路来连接,现在8600想找一条旅游路线,这个路线从A点出发并且最后回到A点,假设经过的路线为

HDU 4738——Caocao&#39;s Bridges——————【求割边/桥的最小权值】

Caocao's Bridges Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 4738 Description Caocao was defeated by Zhuge Liang and Zhou Yu in the battle of Chibi. But he wouldn't give up. Caocao's army st

hdu-4738.Caocao&#39;s Bridges(图中权值最小的桥)

Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 10933    Accepted Submission(s): 3065 Problem Description Caocao was defeated by Zhuge Liang and Zhou Yu in the battle of Chibi.

hdu 4738 Caocao&#39;s Bridges(桥的最小权值+去重)

http://acm.hdu.edu.cn/showproblem.php?pid=4738 题目大意:曹操有一些岛屿被桥连接,每座都有士兵把守,周瑜想把这些岛屿分成两部分,但他只能炸毁一条桥,问最少需要派几个士兵去;如果不能完成输出-1 1:如果这些岛屿不连通,则不需要派人前去 2:如果桥的守卫是0的话也得派一人去炸毁 3:如果不能完成输出-1 4:输出最少需派的人数 #include<stdio.h> #include<string.h> #include<math.h&

HDU4738 Caocao&#39;s Bridges 无向图的桥

一眼题:找所有的桥,然后求最小权值 但是有很多坑点 1:如果本来不联通 输出0,(这个坑我知道) 2:但是还有一个坑,就是当整个连通,最小桥的权值是0时,也必须派一个人去,wa了无数遍(还是太年轻) #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <string> #include

HDU4738 Caocao&#39;s Bridges(桥)

http://acm.hdu.edu.cn/showproblem.php?pid=4738 题意:给定一张无向图,求其中权值最小的一座桥,派最少的士兵去炸掉它!! 思路:直接用tarjan计算出桥并且取其中权值最小者. 此题坑点甚多,1.有可能桥本来就不联通,输出-1.2.桥最小者为0,输出1(至少排一个人去炸桥).3.不要去重边,两个岛之间允许有多座桥,tarjan忽略返回边只忽略一次,加pre_num处理下. 代码: #include<iostream> #include<cstd

hdu4738 Caocao&#39;s Bridges

http://acm.hdu.edu.cn/showproblem.php?pid=4738 题目大意:曹操赤壁之战大败,于是卷土重来.为了避免水上作战,他在长江上建立了一些岛屿,这样他的士兵就可以在岛屿上攻击到 周瑜的军队.同时,为了更方便各个岛屿的支援与部署,他在一些岛屿之间又修建了一些桥,并且在桥上准备了一些守卫的士兵.周瑜 看到后当然要破坏这些岛屿的连接,然而诸葛亮只给他留下了一个bomb,他如果想要炸毁一座桥需要派出至少和守卫士兵数相等的敢死队 去.问最少需要派出多少人. 很佩服出题人

zoj2588 Burning Bridges --- 求割边

#include <iostream> #include <cstring> #include <string> #include <cstdio> #include <cmath> #include <algorithm> #include <vector> #include <queue> #include <map> #define inf 0x3f3f3f3f #define eps 1e-

HDU 4738 Caocao&#39;s Bridges(割边)

乍一看一个模板题,仔细一看还是模板题,但是三个坑.1,不是连通图,放0个.2 守卫为0,放1个. 3注意重边. #include<iostream> #include<cstdio> #include<vector> #include<queue> #include<algorithm> #include<stack> #include<cstring> using namespace std; #define maxn