比赛 寒假集训5 评测结果 AWATTTTTTTTTTTTTTTTT
题目名称 魔法森林 最终得分 10
用户昵称 杨蕙宇 运行时间 35.720 s
代码语言 C++ 内存使用 7.26 MiB
提交时间 2026-03-01 11:32:14
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int N=5e4+10;
const int M=1e5+10;
const int INF=0x3f3f3f3f;
int n,m,s1=INF,s2=INF,mk[N];
bool flag=0;
struct node{
    int v,w1,w2;
};
vector<node>v[N];
void dfs(int fa,int u,int a,int b){
//    cout<<"j"<<fa<<" "<<u<<" "<<a<<" "<<b;
    if(u==n){
        flag=1;
        s1=min(s1,a);
        s2=min(s2,b);
//        cout<<s1<<" "<<s2<<endl;
        return;
    }
    for(auto ed:v[u]){
        int v=ed.v;
        int w1=ed.w1;
        int w2=ed.w2;
//        cout<<u<<" "<<v<<" "<<w1<<" "<<w2<<endl;
        if(v==fa)continue;
        if(v==u)continue;
        if(mk[v])continue;
        mk[v]=1;
        w1=max(w1,a);
        w2=max(w2,b);
        dfs(u,v,w1,w2);
        mk[v]=0;
    }
}
int main(){
    freopen("magicalforest.in","r",stdin);
    freopen("magicalforest.out","w",stdout);
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        int x,y,a,b;
        cin>>x>>y>>a>>b;
        v[x].push_back({y,a,b});
        v[y].push_back({x,a,b});
    }
    dfs(-1,1,-1,-1);
    if(!flag)cout<<-1;
    else cout<<s1+s2;
    return 0;
}