题解 [SHOI2010]最小生成树
题面
解析
看上去是黑题啊!
实际上也就是道网络流最大流。
当然,我们也知道网络流最关键的是建图。
首先,分析一下题目:
题目要求在操作后使给定的边lab一定在最小生成树上,
求最小的操作数。
先设lab连通的边为A,B。
那么,根据Krustal算法,在加入lab时一定没有权值比lab小的边使A,B连通。
所以,只要将权值比lab小的边重新建图,
将容量设为这条边最少的操作次数就行了。
而最小的操作次数就应该是wlab −wi +1。
最后求A到B的最小割(最大流)就行了。
上AC代码:
#include<bits/stdc++.h>
using namespace std; inline int read(){
int sum=,f=;char ch=getchar();
while(ch>'' || ch<''){if(ch=='-')f=-;ch=getchar();}
while(ch>='' && ch<=''){sum=sum*+ch-'';ch=getchar();}
return f*sum;
} const int INF=0x3f3f3f3f;
struct road{
int next,to,w;
}e[];
struct line{
int x,y,w;
}a[];
int n,m,lab;
int s,t;
int head[],cnt=;
int d[],v[]; void add(int x,int y,int w){
e[++cnt].to=head[x];
e[cnt].next=y;
e[cnt].w=w;
head[x]=cnt;
} bool bfs(){
memset(d,-,sizeof(d));
memset(v,,sizeof(v));
queue <int> que;
que.push(s);
v[s]=;
d[s]=;
while(!que.empty()){
int x=que.front();
que.pop();
for(int i=head[x];i;i=e[i].to){
int k=e[i].next;
if(v[k]||!e[i].w) continue;
v[k]=;
d[k]=d[x]+;
que.push(k);
}
}
if(d[t]>) return ;
return ;
} int dfs(int x,int low){
if(x==t) return low;
int c=;
for(int i=head[x];i;i=e[i].to){
int k=e[i].next;
if(d[k]!=d[x]+) continue;
if(!e[i].w) continue;
if((c=dfs(k,min(low,e[i].w)))){
e[i].w-=c;
e[i^].w+=c;
return c;
}
}
return ;
} void DINIC(){
int ans=,mi;
while(bfs()){
while((mi=dfs(s,INF))) ans+=mi;
}
printf("%d\n",ans);
return ;
} int main(){
// freopen("mst.in","r",stdin);
// freopen("mst.out","w",stdout);
n=read();m=read();lab=read();
for(int i=;i<=m;i++){
a[i].x=read();a[i].y=read();a[i].w=read();
}
s=a[lab].x;t=a[lab].y;
for(int i=;i<=m;i++){
if(a[i].w<=a[lab].w&&i!=lab){
add(a[i].x,a[i].y,a[lab].w-a[i].w+);
add(a[i].y,a[i].x,);
add(a[i].y,a[i].x,a[lab].w-a[i].w+);
add(a[i].x,a[i].y,);
}
}
DINIC();
return ;
}
题解 [SHOI2010]最小生成树的更多相关文章
- 【BZOJ2521】[Shoi2010]最小生成树 最小割
[BZOJ2521][Shoi2010]最小生成树 Description Secsa最近对最小生成树问题特别感兴趣.他已经知道如果要去求出一个n个点.m条边的无向图的最小生成树有一个Krustal算 ...
- BZOJ 2521: [Shoi2010]最小生成树
2521: [Shoi2010]最小生成树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 445 Solved: 262[Submit][Statu ...
- bzoj2521 [Shoi2010]最小生成树
[Shoi2010]最小生成树 Time Limit: 10 Sec Memory Limit: 128 MB Description Secsa最近对最小生成树问题特别感兴趣.他已经知道如果要去求出 ...
- 【bzoj2521】[Shoi2010]最小生成树 网络流最小割
题目描述 Secsa最近对最小生成树问题特别感兴趣.他已经知道如果要去求出一个n个点.m条边的无向图的最小生成树有一个Krustal算法和另一个Prim的算法.另外,他还知道,某一个图可能有多种不同的 ...
- 题解 [51nod1771] 最小生成树中的边
题面 解析 这题好像没人写过啊(所以好像没题解)... 然后刚了一天才写出来摆了半天. 其实一开始是想错了, 写了个\(O(n^2)\)的近似于暴力的方法. 就是对于每组权值相等的边, 对于每条边先把 ...
- BZOJ2521:[SHOI2010]最小生成树(最小割)
Description Secsa最近对最小生成树问题特别感兴趣.他已经知道如果要去求出一个n个点.m条边的无向图的最小生成树有一个Krustal算法和另一个Prim的算法.另外,他还知道,某一个图可 ...
- BZOJ2521[Shoi2010]最小生成树——最小割
题目描述 Secsa最近对最小生成树问题特别感兴趣.他已经知道如果要去求出一个n个点.m条边的无向图的最小生成树有一个Krustal算法和另一个Prim的算法.另外,他还知道,某一个图可能有多种不同的 ...
- BZOJ 2521: [Shoi2010]最小生成树(最小割)
题意 对于某一条无向图中的指定边 \((a, b)\) , 求出至少需要多少次操作.可以保证 \((a, b)\) 边在这个无向图的最小生成树中. 一次操作指: 先选择一条图中的边 \((u, v)\ ...
- 【BZOJ2521】 [Shoi2010]最小生成树
Description Secsa最近对最小生成树问题特别感兴趣.他已经知道如果要去求出一个n个点.m条边的无向图的最小生成树有一个Krustal算法和另一个Prim的算法.另外,他还知道,某一个图可 ...
随机推荐
- java 基础(一)-实验楼
一.标识符:区分大小写由数字.大小写字母.$._ 组成,不能由数字开头.各种变量.方法和类等要素命名时使用的字符序列称.凡是自己可以起名字的地方都叫标识符.不可以使用关键字和保留字,但能包含关键字和保 ...
- 阿里云云计算ACP专业认证考试
阿里云云计算专业认证(Alibaba Cloud Certified Professional,ACP)是面向使用阿里云云计算产品的架构.开发.运维类人员的专业技术认证. 更多阿里云云计算ACP专业认 ...
- 线段树维护最后一个0的位置(Restore Permutation)Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2)
题意:https://codeforc.es/contest/1208/problem/D 给你长度为n的序列,s[i]的值为p[1]到p[i-1]中比p[i]小的数的和,让你求出p序列. 思路: 首 ...
- Office/Visio/Project 2019 专业版iso
一.Microsoft Office 2019专业增强版1.简体中文版Office Professional Plus 2019 (x86 and x64) – DVD (Chinese-Simpli ...
- frp基础操作
[common]privilege_mode = true privilege_token = ****bind_port = 7000 dashboard_user = 444444dashboar ...
- sql使用临时表循环
code CREATE PROCEDURE sp_Update_Blogger_Blog_ArticleCount AS BEGIN declare @account varchar(); --博主账 ...
- UVA571Jugs题解--简单数论(其实是瞎搞)
题目链接 https://cn.vjudge.net/problem/UVA-571 分析 刚做了道倒水问题的题想看看能不能水二倍经验,结果发现了这道题 题意翻译:https://www.cnblog ...
- 配置lombok到eclipse上去
使用maven导入lombok.jar包,可以帮助我们省略掉getter/setting方法. 1.pom.xml 添加依赖: <dependency> <groupId>or ...
- webpack开启本地服务器与热更新
第一个webpack本地服务 webpack本地服务相关的一些操作指令与应用 一.第一个webpack本地服务 //工作区间 src//文件夹 index.js//入口文件 index.css//测试 ...
- vue.js项目开发实战笔记001——准备工作
1,Vue.js 是一套构建用户界面的渐进式框架. 2,Vue.js 是由尤雨溪开发出的,最早发布于2014年2月. 3,引用vue.js地址一CDN: <script src="ht ...