【NOIP2013】貨車運輸

Description

A 國有 n 座城市,編號從 1 到 n,城市之間有 m 條雙向道路。每一條道路對車輛都有重量限制,簡稱限重。現在有 q 輛貨車在運輸貨物,司機們想知道每輛車在不超過車輛限重的情況下,最多能運多重的貨物。

Input

第一行有兩個用一個空格隔開的整數 n,m,表示 A 國有 n 座城市和 m 條道路。?
接下來 m 行每行 3 個整數 x、y、z,每兩個整數之間用一個空格隔開,表示從 x 號城市到 y 號城市有一條限重為 z 的道路。注意:x 不等于 y,兩座城市之間可能有多條道路。?
接下來一行有一個整數 q,表示有 q 輛貨車需要運貨。?
接下來 q 行,每行兩個整數 x、y,之間用一個空格隔開,表示一輛貨車需要從 x 城市運輸貨物到 y 城市,注意:x 不等于 y。

Output

輸出共有 q 行,每行一個整數,表示對于每一輛貨車,它的最大載重是多少。如果貨車不能到達目的地,輸出-1。

Sample Input

4 3?
1 2 4?
2 3 3?
3 1 1?
3?
1 3?
1 4?
1 3

Sample Output

3?
-1?
3

Hint

對于 30%的數據,0 < n <1,000,0 < m < 10,000,0 < q < 1,000;

對于 100%的數據,0 < n < 10,000,0 < m < 50,000,0 < q < 30,000,0 ≤ z ≤ 100,000。

題解:
這個題目是找每條路徑上的最大邊權的最小最大值,首先要知道結論,圖中任意兩點路徑的最大最小值一定是在這個圖的最大生成樹上,因為我們做克魯斯卡爾的時候,是將邊從大到到小排序,然后一顆生成樹包含了圖中任意節點并且因為是從大到小,所以所以的邊都盡量選最大的,那么限制條件——那個最小值一定在樹上,所以把樹扣出來,用倍增或者是樹鏈剖分維護一下就可以了。主要對森林的處理,用并查集維護同時向一個聯通塊連一條-1的邊。
代碼:
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#include<cstring>
const int MAXN=200300;
using namespace std;
int n,m,q,num=0,faa[MAXN];
struct edge1{int from,to,quan;void read(){scanf("%d%d%d",&from,&to,&quan);}
}e[MAXN*2];
struct edge3{int from,to,quan;
}h[MAXN*2];
struct edge{int to,quan,first,next;
}a[MAXN*2];
int son[MAXN],size[MAXN],deep[MAXN],fa[MAXN];
int top[MAXN],id[MAXN],w[MAXN],numm;
struct tree{int l,r,minn;
}tr[MAXN*4];void cl(){for(int i=1;i<=MAXN*4-1;i++) tr[i].minn=1<<30;memset(fa,0,sizeof(fa));memset(son,0,sizeof(son));memset(size,0,sizeof(size));memset(deep,0,sizeof(deep));memset(top,0,sizeof(top));memset(id,0,sizeof(id));memset(w,0,sizeof(w));
}bool comp(edge1 x,edge1 y){if(x.quan>y.quan) return 1;return 0;
}void addedge(int from,int to,int quan){a[++num].to=to;a[num].quan=quan;a[num].next=a[from].first;a[from].first=num;
}int find(int now){if(now!=faa[now]) faa[now]=find(faa[now]);return faa[now];
}void hebin(int x,int y){int hh=find(x),hhh=find(y);faa[hh]=hhh;
}void Mtree(){for(int i=1;i<=m;i++) e[i].read();for(int i=1;i<=n;i++) faa[i]=i;for(int i=1;i<=m;i++){int x=e[i].from,y=e[i].to;if(find(x)!=find(y)){hebin(x,y);}}for(int i=2;i<=n;i++){if(find(1)!=find(i)){int hh=find(1),yy=find(i);e[++m].from=hh,e[m].to=yy,e[m].quan=-1;hebin(hh,yy);}}sort(e+1,e+m+1,comp);for(int i=1;i<=n;i++) faa[i]=i;numm=0;for(int i=1;i<=m;i++){int x=e[i].from,y=e[i].to,z=e[i].quan;int xx=find(x);int yy=find(y);if(xx!=yy){numm++;hebin(x,y);addedge(x,y,z),addedge(y,x,z);h[numm].from=x,h[numm].to=y,h[numm].quan=z;}if(numm==n-1) break;}
}void dfs1(int now,int f){fa[now]=f;size[now]=1;deep[now]=deep[f]+1;for(int i=a[now].first;i;i=a[i].next){int to=a[i].to;if(to==f) continue;dfs1(to,now);size[now]+=size[to];if(size[son[now]]<size[to]) son[now]=to;}
}void dfs2(int now,int rf){top[now]=rf;id[now]=++num;if(son[now]) dfs2(son[now],rf);for(int i=a[now].first;i;i=a[i].next){int to=a[i].to;if(to==fa[now]||to==son[now]) continue;dfs2(to,to);}
}void build(int xv,int l,int r){if(l==r){tr[xv].l=l,tr[xv].r=r;if(l==1) return;tr[xv].minn=w[l];return;}tr[xv].l=l,tr[xv].r=r;int mid=(l+r)/2;build(xv*2,l,mid);build(xv*2+1,mid+1,r);tr[xv].minn=min(tr[xv*2].minn,tr[xv*2+1].minn);
}int kanxun(int xv,int l,int r){int L=tr[xv].l,R=tr[xv].r,mid=(L+R)/2;if(l==L&&r==R){return tr[xv].minn;}if(r<=mid) return kanxun(xv*2,l,r);else if(l>mid) return kanxun(xv*2+1,l,r);else return min(kanxun(xv*2,l,mid),kanxun(xv*2+1,mid+1,r));
}int getmin(int x,int y){int topx=top[x],topy=top[y],minn=1<<30;while(topx!=topy){if(deep[topx]<deep[topy]) swap(x,y),swap(topx,topy);minn=min(kanxun(1,id[topx],id[x]),minn);x=fa[topx],topx=top[x];}if(x==y) return minn;if(deep[x]<deep[y]) swap(x,y);minn=min(minn,kanxun(1,id[son[y]],id[x]));return minn;
}int main(){cl();scanf("%d%d",&n,&m);Mtree();memset(fa,0,sizeof(fa));dfs1(1,0);num=0;dfs2(1,1);for(int i=1;i<=numm;i++){if(deep[h[i].from]>deep[h[i].to]) swap(h[i].from,h[i].to);int to=h[i].to,quan=h[i].quan;w[id[to]]=quan;}build(1,1,num);scanf("%d",&q);for(int i=1;i<=q;i++){int x,y;scanf("%d%d",&x,&y);printf("%d\n",getmin(x,y));}
}

?

轉載于:https://www.cnblogs.com/renjianshige/p/7231849.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257908.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257908.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257908.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

殺死應用進程 android,如何殺死Android應用程序啟動的logcat進程?

我有Android應用程序,在Service啟動實現后面跟著代碼&#xff1a;...Process process Runtime.getRuntime().exec("logcat -v time -s " arg);BufferedReader bufferedReader new BufferedReader(new InputStreamReader(process.getInputStream()));...如您所見,我…

Android筆記(六十七) 自定義控件

實際編程中&#xff0c;系統提供的控件往往無法滿足我們的需求&#xff0c;一來是樣子丑陋&#xff0c;二來是一些復雜的組合需要多次使用的話&#xff0c;每次都寫一堆控件的組合會很耗費時間&#xff0c;所以我們將這些組件的組合自定義為一個新的控件&#xff0c;以后使用的…

android 7.0原生room,小米5S 安卓9.0 原生體驗 LineageOS16.0 ROOT

介紹ROM為第三方編譯安卓9.0 LineageOS16.0 &#xff0c;基本功能正常&#xff0c;如有其他bug&#xff0c;理性對待使用Magisk ROOT授權刷機完成后請務必到設置中手動設置當前系統時間和時區去網絡圖標上面的感嘆號和x號方法&#xff1a;打開CaptiveMgr軟件--自動彈出授權彈窗…

圖---互斥集

互斥集主要用于Kruskal算法中&#xff0c;用于求圖的最小生成樹。 互斥集主要有3個基本操作&#xff1a; 1. 初始化各個集合 Make(a)p[a] ← a 2. 查找各個集合的老祖宗 Find(a)if a p[a] : return aelse : return Find(p[a]) 3. 合并兩個集合 Union(a, b)p[Find(b)]…

Oracle配置監聽要注意的地方

昨天心血來潮&#xff0c;把Oracle的監聽都刪了&#xff0c;準備重新配一遍&#xff0c;結果弄了一天才配好&#xff0c;不過對Oracle的了解更深了一些。 對昨天的問題做一個總結&#xff1a; 1、直接在NetManager中刪掉監聽時&#xff0c;實際的監聽服務好像并沒有完全刪除&am…

signature=486e34400687432217e65e837b8e6753,PXE常見錯誤代碼表

在我們日常做無盤時&#xff0c;通常都會遇到一些這樣或那樣的問題&#xff0c;不過好在一般這些錯誤都會有些錯誤代碼&#xff0c;我們可以通過錯誤代碼查詢到一些有幫助的信息。下面是我轉載的一些PXE驅動錯誤代碼表&#xff0c;遇到PXE錯誤時&#xff0c;可查詢下看看&#…

12月25號 Category類別

Category類別 1.在已有類的基礎上進行擴展&#xff0c;無需像繼承一樣子類化&#xff0c;就可以直接添加一些方法 2.繼承不僅可以添加方法還可以添加屬性&#xff0c;類別只能添加方法 3.類別不會改變現有類的方法&#xff0c;萬一重寫&#xff0c;自己寫的優先級高 4.把類別中…

17---Net基礎加強

更新中&#xff0c;敬請期待。。。。。。。。。。。。 復習 將xml顯示到treeview 修改增加 刪除 foreach原理 深拷貝與淺拷貝 模擬數據庫及登陸 復習總結轉載于:https://www.cnblogs.com/yechangzhong-826217795/p/4157562.html

Linux系統rootpassword改動

重新啟動系統。 進入系統引導界面&#xff1a; 按下e鍵&#xff1a; 選擇第二項。內核啟動參數設置&#xff0c;按下e鍵&#xff1a; 在結尾處&#xff0c;輸入數字 1或者 英文 " single"&#xff0c;再回車&#xff1a; 按下b鍵啟動。此時以單用戶模式級別引導啟動程…

關于OC-省市區習題

對于省市區的問題&#xff0c;關鍵在于搞清楚數組嵌套字典&#xff0c;字典里面裝數組的多重嵌套關系&#xff0c;沉下心來&#xff0c;捋清楚思路&#xff0c; 實在看不懂就多打幾遍&#xff0c;這道題理解了&#xff0c;熟練了對之后學習很有好處。 代碼如下&#xff1a; NSS…

23種設計模式----------代理模式(一)

代理模式也叫委托模式。 代理模式定義&#xff1a;對其他對象提供一種代理從而控制對這個對象的訪問。就是&#xff0c;代理類 代理 被代理類&#xff0c;來執行被代理類里的方法。 一般情況下&#xff0c;代理模式化有三個角色。 1&#xff0c;抽象的主題類(或者接口) IGamePl…

(轉) Quartz學習——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成詳解(四)

http://blog.csdn.net/u010648555/article/details/60767633 當任何時候覺你得難受了&#xff0c;其實你的大腦是在進化&#xff0c;當任何時候你覺得輕松&#xff0c;其實都在使用以前的壞習慣。 通過前面的學習&#xff0c;你可能大致了解了Quartz&#xff0c;本篇博文為你打…

被流氓360設置瀏覽器主頁的解決辦法(如果你也遇到了跟我一樣的問題,不妨看一下是不是這個原因)...

最近電腦罷工&#xff0c;重裝了系統&#xff1b;很多常用軟件都不得不重新安裝&#xff0c;其實這都不是事兒&#xff0c;現在基本上都是百兆光纖了&#xff0c;下載安裝都很順溜。 瀏覽器也在安裝之列&#xff0c;因為搞開發所以谷歌火狐瀏覽器都是必裝的&#xff1b;平時基本…

BZOJ1834 [ZJOI2010]network 網絡擴容

網絡流訓練好題。。。但是要給差評&#xff01;蒟蒻表示這就是板子題&#xff0c;然后做了半個小時T T 先跑一邊最大流&#xff0c;得到第一問答案ans。 第二問&#xff1a;原先的邊不動&#xff0c;費用為0。 然后對每條邊在上面再加一條邊&#xff0c;流量為inf&#xff0c;費…

android 更新平臺,Android更新平臺架構方案

這篇文章是去年寫的&#xff0c;我們的兩款app一直這使用umeng的更新服務&#xff0c;但是16年umeng開始放棄更新服務&#xff0c;考慮到切換到其他更新平臺也會面臨這樣的問題&#xff0c;我開始著手自己搭建一個更新平臺。整體方案包含前后端&#xff0c;客戶端代碼封裝成jar…

setSignVisible的修改

store傳入accountReducer 1.從cookie中獲取id,avatar,nickname.2.createStore(reducer, initState)傳入reducer,可以在頁面中state.accountReducer.current_account獲取 const middleware routerMiddleware(browserHistory); let initState {};if(Cookie.hasItem("id&qu…

DGbroker故障切換示例

1.主庫故障 SQL> startup ORACLE instance started.Total System Global Area 1068937216 bytes Fixed Size 2260088 bytes Variable Size 910164872 bytes Database Buffers 150994944 bytes Redo Buffers 5517312 bytes ORA-00205: e…

html 自動觸發 事件,js自動觸發事件自定義事件

在有些情況下&#xff0c;我們需要程序邏輯自動觸發元素的事件&#xff0c;例如js提供了click()&#xff0c; form提供了reset(),submit()等方法&#xff01;在jquery中提供了trigger()方法幫助我們自動觸發事件&#xff0c;原理是什么呢&#xff1f;接下來讓我們一探究竟&…

Storm編程入門API系列之Storm的可靠性的ACK消息確認機制

概念&#xff0c;見博客 Storm概念學習系列之storm的可靠性 什么業務場景需要storm可靠性的ACK確認機制&#xff1f; 答&#xff1a;想要保住數據不丟&#xff0c;或者保住數據總是被處理。即若沒被處理的&#xff0c;得讓我們知道。 public void nextTuple() {num;System.out.…

關于 php mysql pdo cannot find driver 解決方案

1、下載 文件 或者 進入 在PHP源碼包中進入ext/pdo_mysql http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz 2、解壓文件tar zxvf PDO_MYSQL-1.0.2.tgz 3、配置和編譯文件cd PDO_MYSQL-1.0.2/usr/local/php/bin/phpize./configure –with-php-config/usr/local/php/bin/php-config…