BZOJ1196&&洛谷P2323 [HNOI2006]公路修建问题

最小生成树,跑了两遍而已233

第一遍用一级公路跑最小生成树,凑够k条边就跳出,然后把剩下的边,按二级公路跑最小生成树,然后记录max就好了

BZOJ没有让输出方案,贡献了一发OLE

代码

//By AcerMo
#include
#include
#include
#include
#include
#include
using namespace std;
const int M=200500;
int n,m,l;
int fa[M],siz[M],chos[M];
struct edge{int fr,to,c1,c2,id;}e[M];
inline bool cmp1(edge a,edge b){return a.c1'9'||ch<'0') ch=getchar();
	while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
	return x;	
} 
inline int find(int x)
{
	if (x!=fa[x]) return fa[x]=find(fa[x]);
	return x;
}
inline void unionn(int a,int b)
{
	if (siz[a]<=siz[b]) siz[b]+=siz[a],fa[a]=b;
	else siz[a]+=siz[b],fa[b]=a;
	return ;
}
inline void constt()
{
	for (int i=1;i<=n;i++) siz[i]=1,fa[i]=i;
	return ;
}
signed main()
{
	n=read();l=read();m=read();constt();
	for (int i=1;i

 

你可能感兴趣的:(图论-最小生成树)