国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

BZOJ 1196: [HNOI2006]公路修建問題 Kruskal/二分

2019-11-06 06:32:19
字體:
來源:轉載
供稿:網友

題目鏈接:

http://www.lydsy.com/JudgeOnline/PRoblem.php?id=1196

題意:

題解:

其實也并不是最短路,只是用Kruskal的方法去判定符合條件的ans。 我先讓所有公路花費c1(保證了最大值,二分使得最大值最小),用并查集維護一下是否在一個集合,這樣剩下的路就都只能用c2的錢

代碼:

#include <bits/stdc++.h>using namespace std;typedef long long ll;#define MS(a) memset(a,0,sizeof(a))#define MP make_pair#define PB push_backconst int INF = 0x3f3f3f3f;const ll INFLL = 0x3f3f3f3f3f3f3f3fLL;inline ll read(){ ll x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}//////////////////////////////////////////////////////////////////////////const int maxn = 2e5+10;struct node{ int x,y,c1,c2;}E[maxn];int fa[maxn];int n,k,m;int find(int x){ return fa[x]==x ? x : fa[x]=find(fa[x]);}bool check(int x){ int cnt = 0; for(int i=0; i<=n; i++) fa[i] = i; for(int i=1; i<m; i++){ if(E[i].c1 > x) continue; int p1 = find(E[i].x), p2 = find(E[i].y); if(p1 != p2){ fa[p1] = p2; cnt++; } } if(cnt < k) return false; for(int i=1; i<m; i++){ if(E[i].c2 > x) continue; int p1 = find(E[i].x), p2 = find(E[i].y); if(p1 != p2){ fa[p1] = p2; cnt++; } } if(cnt == n-1) return true; return false;}int main(){ scanf("%d%d%d",&n,&k,&m); for(int i=1; i<m; i++){ scanf("%d%d%d%d",&E[i].x,&E[i].y,&E[i].c1,&E[i].c2); } int l=0,r=3e4; int ans = 0; while(l <= r){ int mid = (l+r)/2; if(check(mid)) ans=mid,r=mid-1; else l = mid+1; } cout << ans << endl; return 0;}
上一篇:golang的基本語法

下一篇:linux ---- which

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巨野县| 米易县| 碌曲县| 瓦房店市| 天长市| 大丰市| 安新县| 东丽区| 昌邑市| 台湾省| 翁牛特旗| 汕头市| 蒙阴县| 富源县| 和田市| 商丘市| 永嘉县| 志丹县| 武冈市| 无极县| 沙坪坝区| 合川市| 扶风县| 和平区| 武汉市| 京山县| 平乐县| 津市市| 吉林市| 房山区| 汉寿县| 乾安县| 中西区| 长顺县| 乐业县| 正安县| 永德县| 库车县| 依安县| 彩票| 刚察县|