比赛 20161215 评测结果 AAAAEEEEEEEEAAA
题目名称 相遇时间 最终得分 46
用户昵称 Ostmbh 运行时间 3.803 s
代码语言 C++ 内存使用 7.95 MiB
提交时间 2016-12-16 20:54:04
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <vector>
using namespace std;
struct T{
	int id,tim;
};
queue<T>q;
vector<int>A[110];
vector<int>C[110];
vector<int>D[110];
int ta[1000010]={0};
int tb[1000010]={0};
int main(){
	freopen("meeting.in","r",stdin);
	freopen("meeting.out","w",stdout);
	int n,m;
	scanf("%d %d",&n,&m);
	int x,y,z,c;
	for(int i=1;i<=m;i++){
		scanf("%d %d %d %d",&x,&y,&z,&c);
		A[min(x,y)].push_back(max(x,y));
		C[min(x,y)].push_back(z);
		D[min(x,y)].push_back(c);
	}
	T cl;
	cl.tim=0;
	cl.id=1;
	q.push(cl);
	while(!q.empty()){
		T cdl=q.front();
		q.pop();
		if(cdl.id==n){
			ta[cdl.tim]=1;
			continue;
		}
		for(int i=0;i<A[cdl.id].size();i++){
			int u=A[cdl.id][i];
			T cdc;
			cdc.tim=cdl.tim+C[cdl.id][i];
			cdc.id=u;
			q.push(cdc);
		}
	}
	q.push(cl);
	while(!q.empty()){
		T cdl=q.front();
		q.pop();
		if(cdl.id==n){
			tb[cdl.tim]=1;
			continue;
		}
		for(int i=0;i<A[cdl.id].size();i++){
			int u=A[cdl.id][i];
			T cdc;
			cdc.tim=cdl.tim+D[cdl.id][i];
			cdc.id=u;
			q.push(cdc);
		}
	}
	bool ok=0;
	for(int i=0;i<=1000000;i++)
		if(ta[i]&&tb[i]){
			printf("%d\n",i);
			return 0;
		}
	puts("IMPOSSIBLE");
return 0;
}