洛谷 P6628 [省选联考 2020 B 卷] 丁香之路 做题记录
图论好题啊!
首先我们枚举终点
现在我们的图变成了若干个连通块了,想要使得图连通,我们需要在连通块之间找一条边,让它变成一张连通图,实际上就是一个最小生成树。我们先将连通块缩点,拿相邻的两个点连边,跑一个最小生成树即可。时间复杂度
点击查看代码
#include<bits/stdc++.h>
#define mem(a,b) memset((a),(b),sizeof(a))
#define m0(a) memset((a),0,sizeof(a))
#define lb(x) ((x)&-(x))
#define lc(x) ((x)<<1)
#define rc(x) (((x)<<1)|1)
#define pb(G,x) (G).push_back((x))
#define For(a,b,c) for(int a=(b);a<=(c);a++)
#define Rep(a,b,c) for(int a=(b);a>=(c);a--)
#define in1(a) a=read()
#define in2(a,b) a=read(), b=read()
#define in3(a,b,c) a=read(), b=read(), c=read()
#define inn(i,n,a) For(i,1,n) a[i]=read();
#define ll long long
#define i128 __int128
using namespace std;
inline int read() {
int xx= 0;int f= 1;
char c = getchar();
while(c<'0'||c>'9') {
if(c=='-') f= -1;
c= getchar();
}
while(c>='0'&&c<='9') {
xx= (xx<<1)+(xx<<3)+(c^48);
c= getchar();
}
return xx*f;
}
#define maxn 200050
int n,m,st;
int deg[maxn];
int res;
int fa[maxn],bel[maxn];
struct node {
int u,v,d;
bool operator<(const node x) {return d<x.d; }
};
int find(int x) {return x==fa[x]?fa[x]:fa[x]=find(fa[x]); }
signed main() {
in3(n,m,st);
For(i,1,n) fa[i]=i;
For(i,1,m) {
int u,v;
in2(u,v);
deg[u]++,deg[v]++;
res+=abs(u-v);
fa[find(u)]=find(v);
}
For(i,1,n) bel[i]=find(i);//先缩一次点
For(u,1,n) {
deg[st]++,deg[u]++;
For(i,1,n) fa[i]=i;
fa[find(st)]=find(u);
int ans=res,lst=0;
For(i,1,n) if(deg[i]%2==1) {
if(lst) {ans+=i-lst; For(j,lst,i) fa[find(bel[j])]=find(bel[i]); lst=0; }
else lst=i;
}
vector<node>G; lst=0;
For(i,1,n) if(deg[i]>0) {
if(lst&&find(bel[lst])!=find(bel[i]))
G.push_back({bel[lst],bel[i],abs(i-lst)});
lst=i;
}
sort(G.begin(),G.end());
for(auto [x,y,z]:G)
if(find(x)!=find(y))
fa[find(x)]=find(y),ans+=2*z;
cout<<ans<<' ';
deg[u]--,deg[st]--;
}
}
本文来自博客园,作者:coding_goat_qwq,转载请注明原文链接:https://www.cnblogs.com/CodingGoat/p/18501373
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】