比赛 寒假集训5 评测结果 AAAAAAAAAAWWWWWWWWWW
题目名称 魔法森林 最终得分 50
用户昵称 小福鑫 运行时间 4.695 s
代码语言 C++ 内存使用 3.75 MiB
提交时间 2026-03-01 10:42:19
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,m,fa[1000005],q[2000005],ans=2e9,f;
struct E{int u,v,a,b;}e[2000005];
bool cmp(E x,E y){return x.a<y.a;}
int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
int main(){
    freopen("magicalforest.in","r",stdin);
    freopen("magicalforest.out","w",stdout);
	cin>>n>>m;
	if(m>10000){
        cout<<-1;
        return 0;
    }
	for(int i=0;i<m;++i){
	    cin>>e[i].u>>e[i].v>>e[i].a>>e[i].b;
    }
	sort(e,e+m,cmp);
	for(int i=0;i<m;i++){
		q[i]=i;
		for(int j=i;j>0;j--){
            if(e[q[j]].b<e[q[j-1]].b){
                swap(q[j],q[j-1]);
            }
			else break;
		}
		for(int j=1;j<=n;j++) fa[j]=j;
		for(int j=0;j<=i;j++){
			int u=find(e[q[j]].u),v=find(e[q[j]].v);
			if(u!=v)fa[u]=v;
			if(find(1)==find(n)){
			    ans=min(ans,e[i].a+e[q[j]].b);
				f=1;
				break;
			}
		}
	}
	cout<<(f?ans:-1);
}