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.pswp.cn/news/531706.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/531706.shtml
英文地址,請注明出處:http://en.pswp.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…