比赛 |
平凡的题目 |
评测结果 |
TWWWT |
题目名称 |
平凡的皮卡丘 |
最终得分 |
0 |
用户昵称 |
asddddd |
运行时间 |
2.001 s |
代码语言 |
C++ |
内存使用 |
0.78 MiB |
提交时间 |
2015-11-03 10:47:14 |
显示代码纯文本
//
// main.cpp
// both
//
// Created by Qing Liu on 15/11/3.
// Copyright © 2015年 Qing Liu. All rights reserved.
//
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <vector>
#include <queue>
#define maxn 41000
using namespace std;
struct edge{
int to,cost,rev;
bool ava;
};
vector<edge>G[maxn];
void addedge(int u,int v,int ac,int bc){
G[u].push_back((edge){v,ac,(int)G[v].size(),true});
G[v].push_back((edge){u,bc,(int)G[u].size()-1,true});
}
int ans=-1;
void DFS(int s,int tot){
if (s==1&&tot!=0){
if (ans==-1) {
ans=tot;
}
else
ans=min(ans, tot);
return ;
};
if(ans!=-1&&tot>=ans)
return;
for (int i=0; i<G[s].size(); i++) {
edge &e=G[s][i];
if (e.ava) {
e.ava=0;
G[e.to][e.rev].ava=0;
DFS(e.to,tot+e.cost);
e.ava=1;
G[e.to][e.rev].ava=1;
}
}
return ;
}
int main() {
freopen("both.in", "r", stdin);
freopen("both.out", "w", stdout);
int n,m;
cin>>n>>m;
if (n>20000) {
cout<<-1;
return 0;
}
for (int i=0; i<m; i++) {
int from,to,ac,bc;
cin>>from>>to>>ac>>bc;
addedge(from, to, ac, bc);
}
DFS(1, 0);
cout<<ans;
return 0;
}