hdu Caocao's Bridges(无向图边双连通分量,找出权值最小的桥)

 1 /*
 2     题意:给出一个无向图,去掉一条权值最小边,使这个无向图不再连同!
 3     
 4     tm太坑了...
 5     1,如果这个无向图开始就是一个非连通图,直接输出0
 6     2,重边(两个节点存在多条边, 权值不一样)
 7     3,如果找到了桥的最小权值为0,也就是桥上的士兵数为0,那么还是要最少派一个
 8     士兵过去炸掉桥! 
 9     
10     思路:假设每两个节点最多只有一条边进行相连!
11     进行tarjan算法,如果该算法调用了超过2次,说明这个原图就是不连通的!
12     否则在tarjan算法中将桥存起来!然后我们遍历每一座桥,看一看我们找到的
13     桥(连接的两个定点分别是u, v)是不是(u, v)只有一条路相连接,如果是的,
14     那么就跟新最小值! 
15 */
16 #include<iostream>
17 #include<cstdio>
18 #include<cstring>
19 #include<algorithm>
20 #define M 1000005
21 #define INF 0x3f3f3f3f
22 #define N 1005
23 using namespace std;
24 struct EDGE{
25    int u, v, w, nt; 
26    EDGE(){}
27    EDGE(int u, int v, int w, int nt){
28        this->u=u;
29        this->v=v;
30        this->w=w;
31        this->nt=nt;         
32    }
33 };
34 
35 EDGE edge[M];
36 EDGE brige[M];
37 int first[N];
38 int low[N], pre[N];
39 int dfs_clock;
40 int n, m, cnt, ret;
41 
42 
43 void tarjan(int u, int fa){
44     low[u]=pre[u]=++dfs_clock;
45     for(int e=first[u]; e!=-1; e=edge[e].nt){
46          int v=edge[e].v;
47         
48          if(!pre[v]){
49               tarjan(v, u);
50               low[u]=min(low[u], low[v]);
51               if(low[v]>pre[u])
52                  brige[ret++]=edge[e];
53          }         
54          else if(v!=fa && pre[u]>pre[v])
55               low[u]=min(low[u], pre[v]);
56     }        
57 }
58 
59 int main(){
60     while(scanf("%d%d", &n, &m) && (n||m)){
61         memset(first, -1, sizeof(first));
62         cnt=0;
63         while(m--){
64             int u, v, w;
65             scanf("%d%d%d", &u, &v, &w);
66             edge[cnt]=EDGE(u, v, w, first[u]);
67             first[u]=cnt++;
68             edge[cnt]=EDGE(v, u, w, first[v]);
69             first[v]=cnt++;
70         }      
71         dfs_clock=0;
72         ret=0;
73         memset(low, 0, sizeof(low));
74         memset(pre, 0, sizeof(pre)); 
75         int flag=0;
76         for(int i=1; i<=n; ++i)
77            if(!pre[i]){
78               ++flag;
79               if(flag==2) break;
80               tarjan(i, -1);
81            }
82         
83         int minNum=INF;
84         if(flag==2) minNum=0;
85         else{
86            for(int i=0; i<ret; ++i)
87              if(brige[i].w<minNum){//对假定的桥判断 
88                 int cc=0;
89                 for(int e=first[brige[i].u]; e!=-1; e=edge[e].nt)
90                    if(edge[e].v==brige[i].v) ++cc;
91                 if(cc==1)  minNum=brige[i].w;//说明是真正的桥 
92              }
93            if(minNum==INF) minNum=-1;
94            else if(minNum==0) minNum=1;//这一句不要忘记了! 
95         }
96         printf("%d\n", minNum);
97     } 
98     return 0;    
99 }

 

转载于:https://www.cnblogs.com/hujunzheng/p/3937412.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/531706.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

poj1273Drainage Ditches

1 #include<iostream>2 /*3 题意&#xff1a;就是寻找从源点到汇点的最大流&#xff01;4 要注意的是每两个点的流量可能有多个&#xff0c;也就是说有重边&#xff0c;所以要把两个点的所有的流量都加起来5 就是这两个点之间的流量了&#xff0…

Java11.0.2怎么生成JRE_java环境变量配置,jdk13.0.1中没有jre解决办法

标签&#xff1a;完成后 回车 手动 完成 cmd 没有 alt span 环境变量配置java.Oracle中下载了最新的jdk13.0.1&#xff0c;安装之后发现没自动生成jre&#xff0c;导致环境变量配置一直不成功如果没有自动生成jre&#xff0c;需要手动生成jre手动生成办法&…

hdu4751Divide Groups(dfs枚举完全图集合或者bfs染色)

1 /*************************************************************************2 > File Name: j.cpp3 > Author: HJZ4 > Mail: 2570230521qq.com 5 > Created Time: 2014年08月28日 星期四 12时26分13秒6 ***********************************…

java二期_享学二期java架构师

前言-薇:itstudy01在我们工作和学习的过程中&#xff0c;Java线程我们或多或少的都会用到&#xff0c;但是在使用的过程上并不是很顺利&#xff0c;会遇到各种各样的坑&#xff0c;这里我通过讲解Thread类中的核心方法&#xff0c;以求重点掌握以下关键技术点&#xff1a;线程的…

poj3342Party at Hali-Bula(树形dp)

1 /*2 树形dp&#xff01;3 判重思路&#xff1a;4 当dp[v][0]dp[v][1]时&#xff0c;很自然&#xff0c;flag[u][0]必然是有两种方案的。flag[u][1]则不然&#xff0c;5 因为它只和dp[v][0]有关系。而若flag[v][0]不唯一时&#xff0c;则必然flag[u][1]也不唯一6 …

mysql django构架图_(一)Django项目架构介绍

项目的架构为&#xff1a;1、虚拟环境virtualenv安装Django2.1.3安装pymysql安装mysqlclient安装其他等2、项目结构为&#xff1a;应用APP&#xff1a;blog -- 管理博客account -- 管理用户注册/登录/等后台数据库&#xff1a;mysql路由分层及命名空间&#xff1a;根据应用进行…

poj1330Nearest Common Ancestors 1470 Closest Common Ancestors(LCA算法)

LCA思想&#xff1a;http://www.cnblogs.com/hujunzheng/p/3945885.html 在求解最近公共祖先为问题上&#xff0c;用到的是Tarjan的思想&#xff0c;从根结点开始形成一棵深搜树&#xff0c;非常好的处理技巧就是在回溯到结点u的时候&#xff0c;u的子树已经遍历&#xff0c;这…

LCA算法的理解

LCA思想&#xff1a;在求解最近公共祖先为问题上&#xff0c;用到的是Tarjan的思想&#xff0c;从根结点开始形成一棵深搜树&#xff0c;非常好的处理技巧就是在回溯到结点u的时候&#xff0c;u的子树已经遍历&#xff0c;这时候才把u结点放入合并集合中&#xff0c; 这样u结点…

java连加密的mysql_Java 实现加密数据库连接

一、前言在很多项目中&#xff0c;数据库相关的配置文件内容都是以明文的形式展示的&#xff0c;这存在一定的安全隐患。在开发和维护项目时&#xff0c;不仅要关注项目的性能&#xff0c;同时也要注重其安全性。二、实现思路我们都知道项目启动时&#xff0c;Spring 容器会加载…

codeforces Gargari and Bishops(很好的暴力)

1 /*2 题意&#xff1a;给你一个n*n的格子&#xff0c;每一个格子都有一个数值&#xff01;将两只bishops放在某一个格子上&#xff0c;3 每一个bishop可以攻击对角线上的格子&#xff08;主对角线和者斜对角线&#xff09;&#xff0c;然后会获得格子上的4 数值&a…

java词汇速查手册_java 词汇表速查手册

Abstract class 抽象类:抽象类是不允许实例化的类&#xff0c;因此一般它需要被进行扩展继承。Abstract method 抽象方法:抽象方法即不包含任何功能代码的方法。Access modifier 访问控制修饰符:访问控制修饰符用来修饰Java中类、以及类的方法和变量的访问控制属性。Anonymous …

codeforces Gargari and Permutations(DAG+BFS)

1 /*2 题意&#xff1a;求出多个全排列的lcs&#xff01;3 思路&#xff1a;因为是全排列&#xff0c;所以每一行的每一个数字都不会重复&#xff0c;所以如果有每一个全排列的数字 i 都在数字 j的前面&#xff0c;那么i&#xff0c; j建立一条有向边&#xff01;4 …

hdu4292Food(最大流Dinic算法)

/*    题意&#xff1a;每一个人都有喜欢的吃的和喝的&#xff0c;每一个人只选择一个数量的吃的和一个数量的喝的&#xff0c;问能满足最多的人数&#xff01;&#xff1f;    思路&#xff1a;建图很是重要&#xff01;f-food, p-people, d-drink    建图&#x…

python3.5 连接mysql_python3.5 連接mysql本地數據庫

前期准備工作&#xff1a;安裝python的模塊&#xff0c;網上大部分讓安裝mysqldb模塊&#xff0c;但是會報錯&#xff0c;原因是python3.5不被其支持&#xff1a;請看該鏈接 我們也可以這樣解決&#xff1a;直接執行&#xff1a;sudo pip3 install pymysql;在python3中輸入impo…

java异常顺序_网易新闻

public class SmallT {public static void main(String args[]) {SmallT t new SmallT();int b t.get();System.out.println(b);}public int get() {try {return 1;} finally {return 2;}}}返回的结果是2。我可以通过下面一个例子程序来帮助我解释这个答案&#xff0c;从下面…

java中自动装箱的问题

package wrapper;public class WrapperDemo {public static void main(String[] args) {Integer anew Integer(5);Integer bnew Integer(5);System.out.println(ab);System.out.println(a.equals(b));/*falsetrue*/Integer c127;//属于自动装箱Integer d127;//jdk1.5以后&#…

下载国外网站资料需java_Java开发必知道的国外10大网站

1、https://www.google.com/不解释2、https://stackoverflow.com里面包含各种开发遇到的问题及答案&#xff0c;质量比较高。3、https://github.com/免费的开源代码托管网站&#xff0c;包括了许多开源的项目及示例项目等。4、https://dzone.com/提供技术新闻、编程教程、及各种…

poj 1950 Dessert(dfs枚举,模拟运算过程)

/*   这个代码运行的时间长主要是因为每次枚举之后都要重新计算一下和的值&#xff01;    如果要快的话&#xff0c;应该在dfs&#xff0c;也就是枚举的过程中计算出前边的数值&#xff08;这种方法见第二个代码&#xff09;&#xff0c;直到最后&#xff0c;这样不必每…

poj1949Chores(建图或者dp)

1 /*2 题意&#xff1a;n个任务&#xff0c;有某些任务要在一些任务之前完成才能开始做&#xff01;3 第k个任务的约束只能是1...k-1个任务&#xff01;问最终需要最少的时间完成全部的 4 任务&#xff0…

java 空数组如何判断,java判断数组是否为空

java判断数组是否为空根据数组长度判断&#xff0c;如果为0&#xff0c;则为空&#xff0c;反之不是。 (推荐学习&#xff1a;java课程)public class Main {public static void main(String[] args) {int[] array1 new int[]{}; //被当成 {0}if (array1 null) {System.out.pr…