BZOJ 1196&&洛谷P 2323[HNOI 2006]道路建設問題


最小生成木、2回走っただけ233
第1回は1級道路で最小生成木を走って、k本の辺を集めて飛び出して、それから残りの辺を、2級道路で最小生成木を走って、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<='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