题解 [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的算法.另外,他还知道,某一个图可 ...
随机推荐
- 神奇的负margin解决border“合并”
如上图所示,这是一个分页样式,a:hover时,需要改变边框的颜色. 我们知道,除表格之外,其他标签的border是不能合并的.要解决这个问题,思路有三: 1.table布局(大概很少有人愿意在这里使 ...
- Linux系列(7):入门之磁盘与文件系统管理
1.磁盘的主要概念 下面展示一下磁盘结构图: 1.磁道 2.柱面 3.物理扇区 已经了解了这么多概念,现在总结一下 4.磁盘分区 1.概念 磁盘分区就是将磁盘划分成不同的区域. 2.分区的最小单位 早 ...
- Spring Boot 面试总结(一)
1.使用 Spring Boot 前景? 多年来,随着新功能的增加,spring变得越来越复杂.只需访问https://spring.io/projects页面,我们就会看到可以在我们的应用程序中使用 ...
- MySQL之主键
一.主键 primary key (唯一标识 .不能重复.不能为空) 1.主键-----是表中的字段,这个字段能唯一标识一条记录.例如 学生表(学号.姓名,年级)里的学号,不能重复.不能为空: 课程 ...
- 使用Iview时候 报:no-parsing-error Parsing error: x-invalid-end-tag 解决办法
解决办法有两种解决办法: 1.MenuItem修改为:menu-item 2.在根目录下 .eslintrc.js 文件 rules 下添加: "vue/no-parsing-error&q ...
- O027、看nova-scheduler如何选择计算节点
参考https://www.cnblogs.com/CloudMan6/p/5441782.html 本节重点介绍 nova-scheduler 的调度机制和实现方法:即解决如何选择在那个计算节点 ...
- js安全类型检测
背景: 都知道js内置的类型检测,大多数情况下是不太可靠的,例如: typeof . instanceof typeof 返回一个未经计算的操作数的类型, 可以发现所有对象都是返回object ...
- 封装一些简单的 dom 操作
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- BootStrape基础使用
官网:www.bootcss.com 一. 全局css样式 栅格系统 栅格系统用于通过一系列的行(row)与列(column)的组合来创建页面布局 <!DOCTYPE html> < ...
- jsp引入文件时候经常遇到的${ctx}
jsp引入文件时候经常遇到的${ctx} 在jsp页面中经常见到这样的代码: <script type="text/JavaScript" src="${ctx}/ ...