【NOIP模拟】从我背后出现
Description
给定n个点m条边的无向连通图,对于每条边求出强制选这条边后的最⼩⽣成树⼤⼩。
\(n\leq 10^5,m\leq 2*10^5\)
Input Format
第 1 行包含两个整数 n,m,表示点数和路径数。第 2~m+1 行每行三个整数 ui,vi,wi,表示有一条可以修的路连接 ui 和 vi ,费用为 wi ,wi ≤ 1e9。
Output Format
输出 m 行,每行一个整数,表示选择第i条路径的前提下的最小花费。
路径按输入的顺序编号为 1~m 。
Solution
原图构造最小生成树,对于一条边,如果他是最小生成树上的边,那么答案不变,
那如果不在上面,例如一条边u to v,
那么肯定是在原先树上u到v的路径上删去一条边,然后把这条边添加上去,可以发现删去的是最大的边
然后倍增预处理一下树上最大边即可
Code
#include <cstdio>
#include <algorithm>
#include <cmath>
#define N 100010
#define ll long long
using namespace std;
struct info{
int fr,to,w,nex,id;
friend bool operator < (info a,info b){
return a.w<b.w;
}
}ke[N*2],e[N*4];
int n,m,_log,tot,head[N*4],dep[N],f[N][20];
ll mx[N][20],Ans,Que[N*2];
bool used[N*2];
inline int read() {
int 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;
}
inline void Link(int u,int v,int w){
e[++tot].to=v;
e[tot].w=w;
e[tot].nex=head[u];
head[u]=tot;
}
void dfs(int u,int fa){
for(int i=1;i<=_log;++i){
f[u][i]=f[f[u][i-1]][i-1];
mx[u][i]=max(mx[u][i-1],mx[f[u][i-1]][i-1]);
}
for(int i=head[u];i;i=e[i].nex){
int v=e[i].to;
if(v==fa) continue;
dep[v]=dep[u]+1;
mx[v][0]=e[i].w;
f[v][0]=u;
dfs(v,u);
}
}
int fa[N];
int Find(int u){
return (fa[u]==u)?u:fa[u]=Find(fa[u]);
}
inline void kruskal(){
for(int i=1;i<=n;++i) fa[i]=i;
sort(ke+1,ke+m+1);
int cnt=0;
for(int i=1;i<=m;++i){
int px=Find(ke[i].fr),py=Find(ke[i].to);
if(px!=py){
fa[px]=py;
used[i]=1;
Link(ke[i].fr,ke[i].to,ke[i].w);
Link(ke[i].to,ke[i].fr,ke[i].w);
cnt++;
Ans+=ke[i].w;
}
if(cnt==n-1) break;
}
}
inline ll LCA(int u,int v){
ll r=0;
if(dep[u]>dep[v]) swap(u,v);
int d=dep[v]-dep[u];
for(int i=0;i<=_log;++i)if(d&(1<<i)) r=max(r,mx[v][i]),v=f[v][i];
if(u==v) return r;
for(int i=_log;i>=0;--i)
if(f[u][i]!=f[v][i]) r=max(r,max(mx[u][i],mx[v][i])),u=f[u][i],v=f[v][i];
return max(r,max(mx[v][0],mx[u][0]));
}
int main(){
n=read(),m=read();
_log=log(n)/log(2);
for(int i=1;i<=m;++i)ke[i].fr=read(),ke[i].to=read(),ke[i].w=read(),ke[i].id=i;
kruskal();
dfs(1,0);
for(int i=1;i<=m;++i)
if(used[i]) Que[ke[i].id]=Ans;
else Que[ke[i].id]=Ans-LCA(ke[i].fr,ke[i].to)+ke[i].w;
for(int i=1;i<=m;++i)
printf("%lld\n",Que[i]);
return 0;
}
【NOIP模拟】从我背后出现的更多相关文章
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
- 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...
- 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...
- 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...
- CH Round #58 - OrzCC杯noip模拟赛day2
A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...
- CH Round #52 - Thinking Bear #1 (NOIP模拟赛)
A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...
- CH Round #49 - Streaming #4 (NOIP模拟赛Day2)
A.二叉树的的根 题目:http://www.contesthunter.org/contest/CH%20Round%20%2349%20-%20Streaming%20%234%20(NOIP 模 ...
随机推荐
- 内存泄漏监测-LeakCanary
内存泄漏监测方法之使用LeakCanary LeakCanary出处: github:https://github.com/square/leakcanary/issues square 公司 这个公 ...
- java 之 原型模式(大话设计模式)
原型模式,在笔者理解看来就是克隆,当我们在创建第一个对象时,已经给对象赋值完毕,此时我们需要一个当前对象的副本,如果没有原型模式,我们会再次创建一个对象,然后后二次赋值,保证两个对象完全一致, 这样我 ...
- 常用接口简析1---IEnumerable、IEnumerator简析
常用接口的解析(链接) 1.IEnumerable深入解析 2.IComparable.IComparable接口解析 3.IList.IList接口解析 引言: IEnumerable和I ...
- Session、Cookie 学习笔记
在开始今天的博文之前首先为自己庆祝一下自己有了三个粉丝,也有了同僚的评论,说实话因为这个开心了好久!哈哈,好了在开始今天的正题之前,首先大家需要了解以下几点: a. HTTP 协议是无状态的协议,WE ...
- Spring Cloud Feign 整合 Hystrix
在前面随笔Spring Cloud 之 Feign的feign工程基础上进行改造 1.pom.xml依赖不变 2.application.yml文件添加feign.hystrix.enabled=tr ...
- windows配置git
每次要使用git指令的时候都要去打开git bash 操作,太麻烦,要想直接在dos窗口下使用git指令需要再进行如下环境变量配置. 1.系统环境变量path添加:D://programFiles/g ...
- CCF-201512-2-消除类游戏
问题描述 试题编号: 201512-2 试题名称: 消除类游戏 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游 ...
- 【垃圾回收】Java内存回收实践经验 防止内存报警
jdk6和7服务器端(-server) 默认的新生代的垃圾回收器为:PS Scavenge,老年代默认的垃圾回收器为:PS MarkSweep 目前项目使用了jdk7,tomcat7,经常出现内存堆使 ...
- 【luogu P1396】营救
https://www.luogu.org/problem/show?pid=1396 弱化版的货车运输,用并查集维护连通块,将边按权值升序排序后依次插入直到两点连通,最后插入的边的权值就是最小的拥挤 ...
- spring aop 动态代理批量调用方法实例
今天项目经理发下任务,需要测试 20 个接口,看看推送和接收数据是否正常.因为对接传输的数据是 xml 格式的字符串,所以我拿现成的数据,先生成推送过去的数据并存储到文本,以便验证数据是否正确,这时候 ...