男女做暖暖的免费观看网站,湛江大型网站模板建设,网站登录页面模板 下载,seo执行招聘正题
P4180 题目大意
求严格次小生成树 解题思路
一定存在一种严格次小生成树#xff0c;和最小生成树只差一条边#xff0c;不然可以用一条最小生成树上的边代替#xff0c;从而使边权和更小
那么可以先构造出最小生成树#xff0c;然后枚举每一条不在最小生成树中的边…正题
P4180 题目大意
求严格次小生成树 解题思路
一定存在一种严格次小生成树和最小生成树只差一条边不然可以用一条最小生成树上的边代替从而使边权和更小
那么可以先构造出最小生成树然后枚举每一条不在最小生成树中的边然后求最小生成树中路径上的最大值和严格次大值因为可能相等所以要求严格次大值最后计算最小的替换代价 code
#includecstdio
#includecstring
#includeiostream
#includealgorithm
#define ll long long
#define N 100100
using namespace std;
ll n,m,x,y,mx1,mx2,ans,tot,num;
ll h[N],fa[N],dep[N],f[N][20],g[N][20][2];
struct rec
{ll to,nx,l;
}e[N1];
struct line
{ll x,y,z,p;
}l[N*3];
void add(ll x,ll y,ll z)
{e[tot].toy;e[tot].lz;e[tot].nxh[x];h[x]tot;return;
}
bool cmp(line a,line b)
{return a.zb.z;
}
ll find(ll x)
{return (fa[x]x?x:fa[x]find(fa[x]));
}
void get(ll mx,ll pmx,ll x)
{if(xmx)pmxmx,mxx;else if(pmxxxmx)pmxx;return;
}
void dfs(ll x)
{for(ll i1;i16;i){f[x][i]f[f[x][i-1]][i-1];get(g[x][i][1],g[x][i][0],g[x][i-1][1]);get(g[x][i][1],g[x][i][0],g[x][i-1][0]);get(g[x][i][1],g[x][i][0],g[f[x][i-1]][i-1][1]);get(g[x][i][1],g[x][i][0],g[f[x][i-1]][i-1][0]);}for(ll ih[x];i;ie[i].nx){ll ye[i].to;if(yf[x][0])continue;dep[y]dep[x]1;f[y][0]x;g[y][0][1]e[i].l;dfs(y);}return;
}
void lca(ll mx1,ll mx2,ll x,ll y)
{if(dep[x]dep[y])swap(x,y);for(ll i16;i0;--i)if(dep[f[x][i]]dep[y]){get(mx1,mx2,g[x][i][1]);get(mx1,mx2,g[x][i][0]);xf[x][i];}for(ll i16;i0;--i)if(f[x][i]!f[y][i]){get(mx1,mx2,g[x][i][1]);get(mx1,mx2,g[x][i][0]);get(mx1,mx2,g[y][i][1]);get(mx1,mx2,g[y][i][0]);xf[x][i];yf[y][i];}if(x!y){get(mx1,mx2,g[x][0][1]);get(mx1,mx2,g[x][0][0]);get(mx1,mx2,g[y][0][1]);get(mx1,mx2,g[y][0][0]);}return;
}
int main()
{scanf(%lld%lld,n,m);for(ll i1;im;i)scanf(%lld%lld%lld,l[i].x,l[i].y,l[i].z);sort(l1,l1m,cmp);for(ll i1;in;i)fa[i]i;for(ll i1;im;i){xfind(l[i].x);yfind(l[i].y);if(xy)continue;add(l[i].x,l[i].y,l[i].z);add(l[i].y,l[i].x,l[i].z);numl[i].z;fa[x]y;l[i].p1;}memset(g,-1,sizeof(g));f[1][0]1;dep[1]1;dfs(1);ans1e15;for(ll i1;im;i)if(!l[i].p){mx1mx2-1;lca(mx1,mx2,l[i].x,l[i].y);if(mx10mx1l[i].z)ansmin(ans,num-mx1l[i].z);if(mx20mx2l[i].z)ansmin(ans,num-mx2l[i].z);}printf(%lld,ans);return 0;
}