zoukankan      html  css  js  c++  java
  • hdu4738 Caocao's Bridge Tarjan求割边

    填坑……链接:http://acm.hdu.edu.cn/showproblem.php?pid=4738

    噫这还是我开博客以来第一次切杭电的题

    题意:只有一颗炸弹,要切断这个图,求出这条边权值的最小值。

    很裸的$Tarjan$求割边……

    但是有几个细节问题:

    1、原图可能根本不连通,要输出$0$……

    2、原图没有割边,输出$-1$……

    3、原图割边权值为$0$,但是考虑到题目背景炸桥还是要派出一个人去炸了它……

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cstring>
     5 using namespace std;
     6 const int maxn=1005,maxm=1005*1005;
     7 struct node
     8 {
     9     int from,to,dis,next;
    10 }edge[maxm<<1];
    11 int head[maxn],tot,n,m;
    12 void addedge(int u,int v,int w)
    13 {
    14     edge[++tot]=(node){u,v,w,head[u]};head[u]=tot;
    15 }
    16 int num;
    17 int low[maxn],dfn[maxn],cnt,minn=2147483647,bridge[maxn];
    18 void tarjan(int root,int id)
    19 {
    20     low[root]=dfn[root]=++cnt;
    21     for(int i=head[root];i;i=edge[i].next)
    22     {
    23         if(i==(id^1))continue;
    24         int v=edge[i].to;
    25         if(!dfn[v])
    26         {
    27             tarjan(v,i);
    28             low[root]=min(low[root],low[v]);
    29             if(low[v]>dfn[root])
    30             {
    31                 bridge[++num]=i;
    32                 minn=min(minn,edge[i].dis);
    33             }
    34         }
    35         low[root]=min(low[root],dfn[v]);
    36     }
    37 }
    38 int haha()
    39 {
    40     while(scanf("%d%d",&n,&m)!=EOF&&(n||m))
    41     {
    42         memset(head,0,sizeof(head));memset(dfn,0,sizeof(dfn));
    43         memset(low,0,sizeof(low));
    44         tot=1;cnt=num=0;minn=0x3f3f3f3f;int flag=0;
    45         for(int i=1;i<=m;i++)
    46         {
    47             int x,y,z;scanf("%d%d%d",&x,&y,&z);
    48             addedge(x,y,z);addedge(y,x,z);
    49         }
    50         for(int i=1;i<=n;i++)
    51             if(!dfn[i])
    52             {
    53                 flag++;
    54                 tarjan(i,-1);
    55             }
    56         if(flag>1)puts("0");
    57         else if(!num)puts("-1");
    58         else if(!minn)puts("1");
    59         else printf("%d
    ",minn);
    60     }
    61 }
    62 int sb=haha();
    63 int main(){;}
    hdu4738
  • 相关阅读:
    html自定义加载动画
    数据结构与算法:贪心算法简介
    WEB 前端常用字体和色值你知道多少?
    为什么浮点精度运算会有问题
    Java 字符串格式示例
    使用 Java 和 Maven (JBake) 生成静态网站
    硅谷钢铁侠
    Flink中的5种窗口使用场景
    prometheus-operator监控k8s资源
    fluentd收集k8s集群pod日志
  • 原文地址:https://www.cnblogs.com/Loser-of-Life/p/7354908.html
Copyright © 2011-2022 走看看