题面

解析

看上去是黑题啊!

实际上也就是道网络流最大流。

当然,我们也知道网络流最关键的是建图。

首先,分析一下题目:

题目要求在操作后使给定的边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]最小生成树的更多相关文章

  1. 【BZOJ2521】[Shoi2010]最小生成树 最小割

    [BZOJ2521][Shoi2010]最小生成树 Description Secsa最近对最小生成树问题特别感兴趣.他已经知道如果要去求出一个n个点.m条边的无向图的最小生成树有一个Krustal算 ...

  2. BZOJ 2521: [Shoi2010]最小生成树

    2521: [Shoi2010]最小生成树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 445  Solved: 262[Submit][Statu ...

  3. bzoj2521 [Shoi2010]最小生成树

    [Shoi2010]最小生成树 Time Limit: 10 Sec Memory Limit: 128 MB Description Secsa最近对最小生成树问题特别感兴趣.他已经知道如果要去求出 ...

  4. 【bzoj2521】[Shoi2010]最小生成树 网络流最小割

    题目描述 Secsa最近对最小生成树问题特别感兴趣.他已经知道如果要去求出一个n个点.m条边的无向图的最小生成树有一个Krustal算法和另一个Prim的算法.另外,他还知道,某一个图可能有多种不同的 ...

  5. 题解 [51nod1771] 最小生成树中的边

    题面 解析 这题好像没人写过啊(所以好像没题解)... 然后刚了一天才写出来摆了半天. 其实一开始是想错了, 写了个\(O(n^2)\)的近似于暴力的方法. 就是对于每组权值相等的边, 对于每条边先把 ...

  6. BZOJ2521:[SHOI2010]最小生成树(最小割)

    Description Secsa最近对最小生成树问题特别感兴趣.他已经知道如果要去求出一个n个点.m条边的无向图的最小生成树有一个Krustal算法和另一个Prim的算法.另外,他还知道,某一个图可 ...

  7. BZOJ2521[Shoi2010]最小生成树——最小割

    题目描述 Secsa最近对最小生成树问题特别感兴趣.他已经知道如果要去求出一个n个点.m条边的无向图的最小生成树有一个Krustal算法和另一个Prim的算法.另外,他还知道,某一个图可能有多种不同的 ...

  8. BZOJ 2521: [Shoi2010]最小生成树(最小割)

    题意 对于某一条无向图中的指定边 \((a, b)\) , 求出至少需要多少次操作.可以保证 \((a, b)\) 边在这个无向图的最小生成树中. 一次操作指: 先选择一条图中的边 \((u, v)\ ...

  9. 【BZOJ2521】 [Shoi2010]最小生成树

    Description Secsa最近对最小生成树问题特别感兴趣.他已经知道如果要去求出一个n个点.m条边的无向图的最小生成树有一个Krustal算法和另一个Prim的算法.另外,他还知道,某一个图可 ...

随机推荐

  1. 将本地镜像上传到Docker镜像仓库

    ⒈在Docker Hub(Docker官方镜像仓库)注册自己的用户名. ⒉在Docker中使用docker login命令登录自己的用户名密码. ⒊使用docker push 镜像名称 上传本地镜像到 ...

  2. WebMvcConfigurationSupport跨域和fastjson全局替换

    @Configuration public class WarnWebMvcConfigurationSupport extends WebMvcConfigurationSupport { /** ...

  3. Java 注解(原理及其使用)

    一.注解(annotation)介绍 Java在JDK5中引入源代码的注解机制. 1.什么是注解? 注解为代码添加了元数据,元数据是关于数据的组织.数据域及其关系的说明信息. 更通俗的说,注解为程序元 ...

  4. webSocket协议和Socket.IO

    一.Http无法轻松实现实时应用: ● HTTP协议是无状态的,服务器只会响应来自客户端的请求,但是它与客户端之间不具备持续连接. ● 我们可以非常轻松的捕获浏览器上发生的事件(比如用户点击了盒子), ...

  5. C#将字符串格式化为Json

    private string ConvertStringToJson(string str)        {            //格式化json字符串            JsonSeria ...

  6. ObjectMapper用于将java对象转换为json格式数据以及JSONObject对象解析json格式数据

    ObjectMapper objectMapper = new ObjectMapper(); //反序列化的时候如果多了其他属性,不抛出异常 objectMapper.configure(Deser ...

  7. vue学习(2)-过滤器

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. vue-cli3开干

    npm install -g @vue/cli-service-global vue create hello-world

  9. Centos搭建hexo教程

    hexo文档:https://hexo.io/zh-cn/ 1.安装Git # sudo yum install git-core// 查看版本# git version// 输出git versio ...

  10. docker 安装php

    nginx :docker pull nginx docker run -p 80:80 --name nginx -v /usr/local/nginx/www:/www -v /usr/local ...