题解 [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的算法.另外,他还知道,某一个图可 ...
随机推荐
- IDEA自动生成的注释模板
使用效果如下: * * @功能描述 : $params$ * @return $returns$ * @author xuetao */ 其中 $params$的表达式如下: groovyScript ...
- MySql查看时间
select now();命令查看MySql时间(包括时分秒) select current_date();命令查看MySql时间(不包括时分秒) 在代码中,创建时间.修改时间字段的jdbc语句也可以 ...
- LINK : fatal error LNK1104: cannot open file的解决方法
结果是编译时通过了,但连接(F7)时却显示: LINK : fatal error LNK1104: cannot open file“Debug/1.exe” ============== 上一次运 ...
- ThinkPHP composer的安装,及image图像处理类库的加载
以下教程针对windows系统,示例系统使用win7 composer安装 下载composer安装包,点击安装. 出现'composer choose the command-line php' 要 ...
- Linux中设置系统时间和时区
之前公司里有需求要做机器与服务器做时间同步,服务器发送时间戳和时区过来,机器这边根据接收到的时间戳和时区来改时间. 其实很简单,百度上应该也有很多博客有类似的教程,但是这里强调一点,百度上的博客里写的 ...
- Hinton等人新研究:如何更好地测量神经网络表示相似性
Hinton等人新研究:如何更好地测量神经网络表示相似性 2019年05月22日 08:39:15 喜欢打酱油的老鸟 阅读数 177更多 分类专栏: 人工智能 https://www.toutia ...
- 怎样禁止 html 中 <textarea> 标签可以拉伸改变大小 ?
1. 一般来说, 使用 <textarea> 这个标签都会禁用掉它的这个默认属性, 不然可能会被用户玩儿坏, 而且也不利于其他元素的展示, 使用到的属性是 resize , 改为 none ...
- cent0S 设置静态ip
TYPE=EthernetPROXY_METHOD=noneBROWSER_ONLY=noBOOTPROTO=static # static ip,#BOOTPROTO=dhcp # dynamic ...
- MVC4 日期格式化
// MVC返回到View的日期一般都会带有0分0秒,比如2014/08/22 在前端显示为2014/08/22 00:00:00,比较不美观 // 如果是想展示数据 用label @Html.Lab ...
- pthread 笔记
1.创建线程 res = pthread_create(&a_thread, NULL, thread_function1, NULL); if (res != 0) { perror(&qu ...