求调(TLE 70pts)
查看原帖
求调(TLE 70pts)
1388362
Il1_1_3楼主2024/8/21 16:35

不会优化QwQ

#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define per(i,a,b) for(int i=a;i>=b;i--)
#define P 100003
#define inf 1000000007
using namespace std;
int fa[P],n,m,fx,fy,fb,dis[P],mn=inf,ans;
struct edg
{
	int x,y,a,b;
}e[P];
bool cmd(edg n,edg m){return n.b<m.b;}
int fin(int x){return x==fa[x]?x:fa[x]=fin(fa[x]);}
int kro(int s)
{
	rep(i,1,n) fa[i]=i;
	rep(i,1,m)
	{
		if(e[i].a<=s)
		{
			fx=fin(e[i].x);
			fy=fin(e[i].y);
			fb=e[i].b;
			if(fx!=fy)
			{
				fa[fx]=fy;
				ans=fb;
				if(fin(1)==fin(n)) return 1;
			}
		}
			
	}	
	return 0;	
}
int main()
{
	//freopen("forest.in","r",stdin);
	ios::sync_with_stdio(false);
	cin >> n >> m;
	rep(i,1,m)
	{
		cin >> e[i].x >> e[i].y >> e[i].a >> e[i].b;
		dis[i]=e[i].a;
	}
	sort(e+1,e+m+1,cmd);
	sort(dis+1,dis+m+1);
	per(i,m,1)
	{
		if(dis[i]==dis[i+1]) continue;
		int s=dis[i];
		ans=0;
		if(kro(s)) mn=min(mn,s+ans);
		else break;
	}
	if(mn!=inf) cout << mn;
	else cout << -1;
	return 0;
}
2024/8/21 16:35
加载中...