BNUOJ-26586 Simon the Spider 最小生成树+枚举
题目链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=26586
题意:给一个图,每条边有一个权值。要你求选择一棵树,权值和为sum,然后在树上选择一条边权值为w,然后使得sum-2*w最小。
首先求一遍最小生成树,然后求出每两个点之间的最小瓶颈路,然后枚举边就行了。。
//STATUS:C++_AC_916MS_30048KB
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
typedef long long LL; const int N=; struct Edge{
int u,v,w;
}e[],et[];
int first[N],next[];
int p[N],vis[N],d[N][N];
bool mst[];
int n,m,mt; void adde(int a,int b,int c)
{
et[mt].u=a,et[mt].v=b,et[mt].w=c;
next[mt]=first[a];first[a]=mt++;
et[mt].u=b,et[mt].v=a,et[mt].w=c;
next[mt]=first[b];first[b]=mt++;
} int cmp(const Edge& a,const Edge& b)
{
return a.w<b.w;
} int find(int x){return p[x]==x?x:p[x]=find(p[x]);} int Kruskal()
{
int i,j,x,y,sum=,cnt=;
for(i=;i<=n;i++)p[i]=i;
sort(e,e+m,cmp);
mem(mst,);
for(i=;i<m;i++){
x=find(e[i].u);
y=find(e[i].v);
if(x!=y){
cnt++;
sum+=e[i].w;
p[y]=x;
mst[i]=true;
}
}
if(cnt<n-)return -;
return sum;
} int dfs(int& s,int u,int fa,int hig)
{
int i,v;
for(i=first[u];i!=-;i=next[i]){
v=et[i].v;
if(v==fa)continue;
d[s][v]=max(hig,et[i].w);
dfs(s,v,u,d[s][v]);
}
return ;
} int main(){
// freopen("in.txt","r",stdin);
int i,j;
while(~scanf("%d%d",&n,&m))
{
for(i=;i<m;i++){
scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);
} int sum;
if((sum=Kruskal())==-){
printf("disconnected\n");
continue;
}
mem(first,-);mt=;
for(i=;i<m;i++){
if(mst[i]){
adde(e[i].u,e[i].v,e[i].w);
}
}
mem(d,);
for(i=;i<=n;i++){
dfs(i,i,-,);
}
int ans=0x7FFFFFFF;
for(i=;i<m;i++){
ans=min(ans,sum-d[e[i].u][e[i].v]-e[i].w);
} printf("%d\n",ans);
}
return ;
}
BNUOJ-26586 Simon the Spider 最小生成树+枚举的更多相关文章
- HDU 1589 Find The Most Comfortable Road 最小生成树+枚举
find the most comfortable road Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- HDU4081 Qin Shi Huang's National Road System【prim最小生成树+枚举】
先求出最小生成树,然后枚举树上的边,对于每条边"分别"找出这条割边形成的两个块中点权最大的两个 1.因为结果是A/B.A的变化会引起B的变化,两个制约.无法直接贪心出最大的A/B. ...
- csu1116 Kingdoms 最小生成树-枚举状态
题目链接: csu 1116 题意: 有一幅双向图连接N个城市(标号1~n,1表示首都) 每一个城市有一个价值W. 地震摧毁了全部道路,现给出可修复的m条道路并给出修复每条道路所需的费用 问在总费用 ...
- CSU 1541 There is No Alternative (最小生成树+枚举)
题目链接:传送门 题意: 有n个点.m条边.要使n个点所有连起来且要花费最小.问有哪些边是必需要连的. 分析: 要使花费最小肯定是做最小生成树.可是题目要求哪些边是必需要用的.我们能够 这样思考,我们 ...
- 2017北京国庆刷题Day6 afternoon
期望得分:100+100+40=240 实际得分:100+0+40=140 二进制拆分.二进制前缀和 #include<cstdio> #include<iostream> u ...
- Codeforces Round #535(div 3) 简要题解
Problem A. Two distinct points [题解] 显然 , 当l1不等于r2时 , (l1 , r2)是一组解 否则 , (l1 , l2)是一组合法的解 时间复杂度 : O(1 ...
- UVA-10600(次小生成树)
题意: 现在给一个图,问最小生成树和次小生成树的权值和是多少; 思路: 求最小生成树的两种方法,次小生成树是交换最小生成树的其中一条边得到的,现在得到了最小生成树,枚举不在次小生成树中的边,再求一边最 ...
- 【POJ 1679】 The Unique MST
[题目链接] 点击打开链接 [算法] 先求出图的最小生成树 枚举不在最小生成树上的边,若加入这条边,则形成了一个环,如果在环上且在最小生成树上的权值最大的边等于 这条边的权值,那么,显然最小生成树不唯 ...
- 国庆 day 6 下午
1.数组异或 (xorarray.pas/c/cpp) (xorarray.in/out) 时间限制:2s/空间限制:256M [题目描述] xor——异或,和 and 与or 一样,是一种重要的逻辑 ...
随机推荐
- hdu 3449
有依赖的背包,转化成01背包来做: #include<iostream> #include<cstdio> #include<cstring> #include&l ...
- sequel 连接不上,命令行能连上
Sequel pro won't connect anymore I'm running into some trouble right now. I worked yesterday on my d ...
- console中应用MFC类的方法
1.添加#include <afx.h>或者<afxwin.h> 这时会报错1>c:\program files\microsoft visual studio 8\vc ...
- 1046-第K回文数
描述 回文数是这样一个正整数:它从左往右读和从右往左读是一样的.例如1,111,121,505都是回文数.将1到100,000,000内所有回文数按从小到达排序后,第k个回文数是多少呢? 输入 第一行 ...
- 【BZOJ 2453|bzoj 2120】 2453: 维护队列 (分块+二分)
2453: 维护队列 Description 你小时候玩过弹珠吗? 小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N.为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色的弹珠有 ...
- HeadFirst设计模式之适配器模式
一. 1. 2.The Adapter Pattern converts the interface of a class into another interface the clients exp ...
- Qt xcode wrapper Qios OpenFly
https://github.com/richardmg/QtWrapper https://github.com/richardmg/qios https://github.com/richardm ...
- QStringList与QString互转
QStringList fonts;fonts << "Arial" << "Helvetica" << "Tim ...
- POJ 1879 Tempus et mobilius Time and motion 队列和栈
很简单的队列和栈的应用,不过读明白题意非常重要:(直接引用白书的题解)三个轨道,一个库.分别是分钟单位的轨道,5min单位的轨道,一小时单位的轨道,还有就是n容量的库.每过一分钟,一个小球从库里面出来 ...
- HDU4614【线段树。】
果然看了理解了一下大牛的代码然后自己敲结果果然有不少错误 回复说,线段树做为一种数据结构,最好以一种风格过一题裸的然后作为自己的模板.. 二分写的也很恶心哪 还有题目稍复杂一点的注定得推敲各种公式,不 ...