比赛 |
平凡的题目 |
评测结果 |
ATTTA |
题目名称 |
平凡的皮卡丘 |
最终得分 |
40 |
用户昵称 |
KZNS |
运行时间 |
3.027 s |
代码语言 |
C++ |
内存使用 |
1.01 MiB |
提交时间 |
2015-11-03 11:58:17 |
显示代码纯文本
// KZ's
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin ("both.in");
ofstream fout ("both.out");
///////
#define XXX 40004
///////
class poi {
public:
int x,v;
poi push(int a,int b) {
x=a;
v=b;
return *this;
}
};
///////
vector <poi> mp[XXX];
vector <int> fed[XXX];
bool lsd[XXX]={0,1};
int n,m;
///////
void rin() {
fin>>n>>m;
int a,b,c,d;
poi poiu;
for (int i=0;i<m;i++) {
fin>>a>>b>>c>>d;
mp[a].push_back(poiu.push(b,c));
mp[b].push_back(poiu.push(a,d));
}
}
void spfa(int x) {
vector <int> sed(XXX,0x7fffffff);
sed[x]=0;
queue <int> ls;
ls.push(x);
lsd[x]=true;
int u;
while (!ls.empty()) {
u=ls.front();
ls.pop();
lsd[u]=false;
for (int i=0;i<mp[u].size();i++) {
if (sed[u]+mp[u][i].v<sed[mp[u][i].x]) {
sed[mp[u][i].x]=sed[u]+mp[u][i].v;
if (!lsd[mp[u][i].x]) {
ls.push(mp[u][i].x);
lsd[mp[u][i].x]=true;
}
}
}
}
swap(fed[x],sed);
}
inline int vvv(poi x,poi y) {
if (fed[x.x][y.x]==0x7fffffff)
return -1;
else
for (int i=0;i<mp[y.x].size();i++)
if (mp[y.x][i].x==1)
return x.v+fed[x.x][y.x]+mp[y.x][i].v;
}
void work() {
int ed=0x7fffffff;
int a,b;
for (int i=0;i<mp[1].size();i++)
spfa(mp[1][i].x);
for (int i=0;i<mp[1].size();i++)
for (int j=i+1;j<mp[1].size();j++) {
a=vvv(mp[1][i], mp[1][j]);
if (a>0&&a<ed)
ed=a;
a=vvv(mp[1][j], mp[1][i]);
if (a>0&&a<ed)
ed=a;
}
if (ed==0x7fffffff)
fout<<-1<<endl;
else
fout<<ed<<endl;
}
/////////
int main() {
rin();
work();
return 0;
}
// UBWH