cf测评姬比uva快了五倍。。。

/*
不管这条边是不是在mst上,直接跑lca求出路径上的最大边w即可
ans=mst-w+dist(u,v)
*/
#include<bits/stdc++.h>
using namespace std;
#define maxn 100007
struct Edge{int to,nxt,w;}edge[maxn<<];
struct E{int u,v,w,flag;}e[maxn<<];
int cmp(E a,E b){return a.w<b.w;}
int head[maxn],tot,n,m,q;
map<int,int>mp[maxn];
/*4 5 2 1 3*/
void addedge(int u,int v,int w){
edge[tot].w=w;
edge[tot].to=v;
edge[tot].nxt=head[u];
head[u]=tot++;
}
int F[maxn];
int find(int x){
return F[x]==-?x:F[x]=find(F[x]);
}
int kruskal(){
memset(F,-,sizeof F);
sort(e+,e++m,cmp);
int cnt=,res=;
for(int i=;i<=m;i++){
int f1=find(e[i].u),f2=find(e[i].v);
if(f1==f2)continue;
addedge(e[i].u,e[i].v,e[i].w);
addedge(e[i].v,e[i].u,e[i].w);
res+=e[i].w;
F[f1]=f2;
if(++cnt==n)break;
}
return res;
} int d[maxn],f[maxn][],dp[maxn][];
void bfs(){
memset(d,,sizeof d);
memset(f,,sizeof f);
memset(dp,,sizeof dp);
queue<int>q;
q.push();
d[]=;
while(!q.empty()){
int x=q.front();q.pop();
for(int i=head[x];i!=-;i=edge[i].nxt){
int y=edge[i].to;
if(d[y])continue;
d[y]=d[x]+;
f[y][]=x;
dp[y][]=edge[i].w;
for(int k=;k<=;k++){
f[y][k]=f[f[y][k-]][k-];
dp[y][k]=max(dp[y][k-],dp[f[y][k-]][k-]);
}
q.push(y);
}
}
}
int lca(int x,int y){//返回路径上的最大边
int res=;
if(d[x]<d[y])swap(x,y);
for(int i=;i>=;i--)
if(d[f[x][i]]>=d[y]){
res=max(res,dp[x][i]);
x=f[x][i];
}
if(x==y)return res;
for(int i=;i>=;i--)
if(f[x][i]!=f[y][i]){
res=max(res,max(dp[x][i],dp[y][i]));
x=f[x][i],y=f[y][i];
}
res=max(res,max(dp[x][],dp[y][]));
return res;
} void init(){
memset(head,-,sizeof head);
memset(e,,sizeof e);
memset(edge,,sizeof edge);
for(int i=;i<=n;i++)mp[i].clear();
tot=;
}
int main(){
while(scanf("%d%d",&n,&m)==){
init();
for(int i=;i<=m;i++){
scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);
mp[e[i].u][e[i].v]=mp[e[i].v][e[i].u]=e[i].w;
}
int mst=kruskal();
bfs();
scanf("%d",&q);
while(q--){
int u,v;
scanf("%d%d",&u,&v); cout<<mst-lca(u,v)+mp[u][v]<<endl;
}
}
}

Imperial roads 非严格次小生成树的更多相关文章

  1. XJOI 3629 非严格次小生成树(pqq的礼物)

    题目描述: 有一天,pqq准备去给×i×准备礼物,他有一些礼品准备包装一下,他用线将这些礼物连在一起,不同的礼物因为风格不同所以连接它们需要不同价值的线.风格差异越大,价格越大(所以两个礼物之间只有一 ...

  2. (luogu4180) [Beijing2010组队]次小生成树Tree

    严格次小生成树 首先看看如果不严格我们怎么办. 非严格次小生成树怎么做 由此,我们发现一个结论,求非严格次小生成树,只需要先用kruskal算法求得最小生成树,然后暴力枚举非树边,替换路径最大边即可. ...

  3. 洛谷P4180 [Beijing2010组队]次小生成树Tree(最小生成树,LCT,主席树,倍增LCA,倍增,树链剖分)

    洛谷题目传送门 %%%TPLY巨佬和ysner巨佬%%% 他们的题解 思路分析 具体思路都在各位巨佬的题解中.这题做法挺多的,我就不对每个都详细讲了,泛泛而谈吧. 大多数算法都要用kruskal把最小 ...

  4. 严格次小生成树(Bzoj1977:[Beijing2010组队]次小生成树)

    非严格次小生成树 很简单,先做最小生成树 然后枚举没加入的边加入,替换掉这个环内最大的边 最后取\(min\) 严格次小生成树 还是一样的 可以考虑维护一个严格次大值 最大值和枚举的边相同就替换次大值 ...

  5. P4180 严格次小生成树[BJWC2010] Kruskal,倍增

    题目链接\(Click\) \(Here\). 题意就是要求一个图的严格次小生成树.以前被题面吓到了没敢做,写了一下发现并不难. 既然要考虑次小我们就先考虑最小.可以感性理解到一定有一种次小生成树,可 ...

  6. 算法笔记--次小生成树 && 次短路 && k 短路

    1.次小生成树 非严格次小生成树:边权和小于等于最小生成树的边权和 严格次小生成树:    边权和小于最小生成树的边权和 算法:先建好最小生成树,然后对于每条不在最小生成树上的边(u,v,w)如果我们 ...

  7. 洛谷P4180 [BJWC2010]次小生成树(最小生成树,LCT,主席树,倍增LCA,倍增,树链剖分)

    洛谷题目传送门 %%%TPLY巨佬和ysner巨佬%%% 他们的题解 思路分析 具体思路都在各位巨佬的题解中.这题做法挺多的,我就不对每个都详细讲了,泛泛而谈吧. 大多数算法都要用kruskal把最小 ...

  8. 【luogu P4180 严格次小生成树[BJWC2010]】 模板

    题目链接:https://www.luogu.org/problemnew/show/P4180 这个题卡树剖.记得开O2. 这个题inf要到1e18. 定理:次小生成树和最小生成树差距只有在一条边上 ...

  9. BZOJ 1977 严格次小生成树

    小C最近学了很多最小生成树的算法,Prim算法.Kurskal算法.消圈算法等等.正当小C洋洋得意之时,小P又来泼小C冷水了.小P说,让小C求出一个无向图的次小生成树,而且这个次小生成树还得是严格次小 ...

随机推荐

  1. python(四)类变量和实例变量

    转载自[1] 实际这是个实例变量是否指向类变量的问题. python的类变量和实例变量,顾名思义,类变量是指跟类的变量,而实例变量,指跟类的具体实例相关联的变量,具体体现为self.x 等.实际要注意 ...

  2. python(十一)面向切面编程AOP和装饰器

    二.装饰器 装饰器可以在给函数修改功能的同时并不改变这个函数本身.(以下用的都是python2.7) 首先,在python里面函数是对象,在下面的函数里"fun"是函数也是对象可以 ...

  3. dubbo学习笔记1

    DUBBO入门 官方文档:https://dubbo.gitbooks.io/dubbo-user-book/content/preface/ 服务提供者 项目结构: pom文件: <?xml ...

  4. Unique Morse Code Words

    Algorithm [leetcode]Unique Morse Code Words https://leetcode.com/problems/unique-morse-code-words/ 1 ...

  5. 【转】实习小记-python 内置函数__eq__函数引发的探索

    [转]实习小记-python 内置函数__eq__函数引发的探索 乱写__eq__会发生啥?请看代码.. >>> class A: ... def __eq__(self, othe ...

  6. Session、LocalStorage、SessionStorage、Cache-Ctrol比较

    1.Session Session是什么? 服务器通过 Set-Cookie给用户一个sessionIdsessionId对应 服务器 内的一小块内存每次用户访问服务器的时候,服务器就听过Sessio ...

  7. 题解-SDOI2015 约数个数和

    Problem bzoj3994 洛谷3327 题意:设 \(d(x)\) 为 \(x\) 的约数个数,给定 \(N,M\),求\(\sum_{i=1}^N\sum_{j=1}^Md(ij)\) \( ...

  8. codeforces411div.2

    每日CF: 411div2 Solved A CodeForces 805A Fake NP Solved B CodeForces 805B 3-palindrome Solved C CodeFo ...

  9. 001_获取nginx证书

    一. 以下命令可以获取nginx域名的证书 openssl s_client -showcerts -connect www.jyall.com:443 < /dev/null 2>&am ...

  10. redis-3.2.11哨兵模式的配置

    设置内核参数: echo never > /sys/kernel/mm/transparent_hugepage/enabled > /proc/sys/vm/overcommit_mem ...