E. Minimum spanning tree for each edge
time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

Connected undirected weighted graph without self-loops and multiple edges is given. Graph contains n vertices and m edges.

For each edge (u, v) find the minimal possible weight of the spanning tree that contains the edge (u, v).

The weight of the spanning tree is the sum of weights of all edges included in spanning tree.

Input

First line contains two integers n and m (1 ≤ n ≤ 2·105, n - 1 ≤ m ≤ 2·105) — the number of vertices and edges in graph.

Each of the next m lines contains three integers ui, vi, wi (1 ≤ ui, vi ≤ n, ui ≠ vi, 1 ≤ wi ≤ 109) — the endpoints of the i-th edge and its weight.

Output

Print m lines. i-th line should contain the minimal possible weight of the spanning tree that contains i-th edge.

The edges are numbered from 1 to m in order of their appearing in input.

Sample test(s)
input
5 7
1 2 3
1 3 1
1 4 5
2 3 2
2 5 3
3 4 2
4 5 4
output
9
8
11
8
8
8
9

保证某条边e存在的MST就是普通Kruskal把e优先到了最前面。

先求一遍MST,如果e不再MST上,是因为形成了环,把环上除了e的最大权边去掉就好了。

(以前的LCA:用ST来RMQ,查询O(1)

(向祖先结点倍增其实和ST差不多,查询O(logn),维护信息灵活

(一开始想的是树剖,复杂度稍高

#include<bits/stdc++.h>
using namespace std; typedef long long ll; const int N = 2e5+, M = N*; int pa[N], rak[N];
int fd(int x){ return pa[x] ? pa[x] = fd(pa[x]) : x; }
bool unite(int x,int y)
{
int a = fd(x), b = fd(y);
if(a == b) return false;
if(rak[a] < rak[b]){
pa[a] = b;
}
else {
pa[b] = a;
if(rak[a] == rak[b]) rak[a]++;
}
return true;
} int fro[N], to[N], we[N]; int hd[N];
int nx[M], ver[M], wei[M];
int ec; void add_e(int u,int v,int w)
{
ver[++ec] = v;
wei[ec] = w;
nx[ec] = hd[u];
hd[u] = ec;
} int n, m;
int *cmp_c;
bool cmp_id(int i,int j){ return cmp_c[i] < cmp_c[j]; } int r[N];
ll kruskal()
{
ll re = ;
int i,j;
for(i = ; i <= m; i++) r[i] = i;
cmp_c = we;
sort(r+, r + + m, cmp_id);
//ec = 0;
for(i = ; i <= m; i++){
j = r[i];
if(unite(fro[j],to[j])){
add_e(fro[j],to[j],we[j]);
add_e(to[j],fro[j],we[j]);
re += we[j];
we[j] = ;
}
}
return re;
} const int LOG = ; int fa[N][LOG], mx[N][LOG];
int dep[N]; void dfs(int u,int f = ,int fw = ,int d = )
{
fa[u][] = f;
mx[u][] = fw;
dep[u] = d;
for(int i = hd[u]; i; i = nx[i]) {
int v = ver[i];
if(v == f) continue;
dfs(v,u,wei[i],d+);
}
} int lg; int queryMx(int u,int v)
{
int re = , i;
if(dep[u] < dep[v]) swap(u,v);
for(i = lg; i >= ; i--) if(dep[u] - (<<i) >= dep[v]){
re = max(re,mx[u][i]);
u = fa[u][i];
}
if(u == v) return re;
for(i = lg; i >= ; i--) if(fa[u][i] != fa[v][i]){
re = max(re,max(mx[u][i],mx[v][i]));
u = fa[u][i];
v = fa[v][i];
}
return max(re,max(mx[u][],mx[v][]));
} //#define LOCAL
int main()
{
#ifdef LOCAL
freopen("in.txt","r",stdin);
#endif
//cout<<log2(N);
scanf("%d%d",&n,&m);
int i,j;
for(i = ; i <= m; i++){
scanf("%d%d%d",fro+i,to+i,we+i);
}
ll mst = kruskal(); dfs();
lg = ceil(log2(n));
for(j = ; j <= lg; j++){
for(i = ; i <= n; i++) if(fa[i][j-]){
fa[i][j] = fa[fa[i][j-]][j-];
mx[i][j] = max(mx[i][j-],mx[fa[i][j-]][j-]);
}
}
for(i = ; i <= m; i++) {
printf("%I64d\n",we[i]?mst + we[i] - queryMx(fro[i],to[i]):mst);
}
return ;
}

codeforces 609E Minimum spanning tree for each edge的更多相关文章

  1. [Educational Round 3][Codeforces 609E. Minimum spanning tree for each edge]

    这题本来是想放在educational round 3的题解里的,但觉得很有意思就单独拿出来写了 题目链接:609E - Minimum spanning tree for each edge 题目大 ...

  2. codeforces 609E. Minimum spanning tree for each edge 树链剖分

    题目链接 给一个n个节点m条边的树, 每条边有权值, 输出m个数, 每个数代表包含这条边的最小生成树的值. 先将最小生成树求出来, 把树边都标记. 然后对标记的边的两个端点, 我们add(u, v), ...

  3. Educational Codeforces Round 3 E (609E) Minimum spanning tree for each edge

    题意:一个无向图联通中,求包含每条边的最小生成树的值(无自环,无重边) 分析:求出这个图的最小生成树,用最小生成树上的边建图 对于每条边,不外乎两种情况 1:该边就是最小生成树上的边,那么答案显然 2 ...

  4. cf 609E.Minimum spanning tree for each edge

    最小生成树,lca(树链剖分(太难搞,不会写)) 问存在这条边的最小生成树,2种情况.1.这条边在原始最小生成树上.2.加上这条半形成一个环(加上),那么就找原来这条边2端点间的最大边就好(减去).( ...

  5. Codeforces Educational Codeforces Round 3 E. Minimum spanning tree for each edge LCA链上最大值

    E. Minimum spanning tree for each edge 题目连接: http://www.codeforces.com/contest/609/problem/E Descrip ...

  6. Codeforces Educational Codeforces Round 3 E. Minimum spanning tree for each edge 树上倍增

    E. Minimum spanning tree for each edge 题目连接: http://www.codeforces.com/contest/609/problem/E Descrip ...

  7. Educational Codeforces Round 3 E. Minimum spanning tree for each edge LCA/(树链剖分+数据结构) + MST

    E. Minimum spanning tree for each edge   Connected undirected weighted graph without self-loops and ...

  8. CF# Educational Codeforces Round 3 E. Minimum spanning tree for each edge

    E. Minimum spanning tree for each edge time limit per test 2 seconds memory limit per test 256 megab ...

  9. Educational Codeforces Round 3 E. Minimum spanning tree for each edge 最小生成树+树链剖分+线段树

    E. Minimum spanning tree for each edge time limit per test 2 seconds memory limit per test 256 megab ...

随机推荐

  1. hcheck 脚本

    hcheck.sql - Script to Check for Known Problems in Oracle8i, Oracle9i, Oracle10g, Oracle 11g and Ora ...

  2. 千图网爬图片(BeautifulSoup)

    import requests from bs4 import BeautifulSoup import os #导入os模块 class TuKuSpider(): ""&quo ...

  3. jdk监控tomcat

    一, tomcat配置文件 在tomcat的配置文件中添加被监控的项 #在tomcat配置文件中开启监控功能 vim /application/tomcat/bin/catalina.sh +97 C ...

  4. linux 卡在进度条进不去解决办法之一

    centos为例 一, 如下: 如果这个地方卡住了的话也许是你上次改了passwd文件,这个是其中一个情况. 如果刚刚开机就卡住了或者怎么卡住了的话在开机的读条时候摁esc显示读取的进程,根据显示的错 ...

  5. flask综合整理1

    前言: 框架的对比 Django:1个重武器,包含了web开发中常用的功能.组件的框架:(ORM.Session.Form.Admin.分页.中间件.信号.缓存.ContenType....): To ...

  6. nginx打开php错误提示

    首先要编辑php配置文件: vi /etc/php.ini error_reporting = E_ERROR display_errors = On  因为我开启了php-fpm.所以,还要编辑 p ...

  7. HDU 5289——Assignment——————【RMQ+优化求解】

    Assignment Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  8. nyoj 546——Divideing Jewels——————【dp、多重背包板子题】

    Divideing Jewels 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 Mary and Rose own a collection of jewells. ...

  9. C# Uploadify 文件上传组件的使用

    一.页面的构建 1.要引用的JS和CSS <link href="../css/jquery-ui.css" rel="stylesheet" type= ...

  10. [转]ASP.NET MVC 5 List Editor with Bootstrap Modals

    本文转自:https://www.codeproject.com/articles/786085/asp-net-mvc-list-editor-with-bootstrap-modals With ...