比赛 20150424 评测结果 AAAAEEEEEEEEETA
题目名称 相遇时间 最终得分 33
用户昵称 mikumikumi 运行时间 8.436 s
代码语言 C++ 内存使用 0.91 MiB
提交时间 2015-04-24 10:06:56
显示代码纯文本
#include<cstdio>
#include<deque>
#include<iostream>
using namespace std;
int n,m,ok=0;
int hs[100000],ans=0xffffff,maxn=0xffffff;
deque<int> w[3][101];
class miku
{
public:
	int to;
	int lo;
};
deque<miku> e[3][101];
void bfs(int i)
{
	deque<int> Q;
	int iq[101]={0};
	Q.push_back(1);
	iq[1]=1;
	w[i][1].push_back(0);
	while(!Q.empty())
	{
		int x=Q.front();Q.pop_front();
		iq[x]=0;
		for(int j=0;j<e[i][x].size();j++)
		{
			miku r=e[i][x][j];
			for(int k=0;k<w[i][x].size();k++)
			{
				w[i][r.to].push_back(w[i][x][k]+r.lo);
			}
			if(iq[r.to]==0)
			{
				iq[r.to]=1;
				Q.push_back(r.to);
			}
		}
	}
	if(i==1)
	{
		for(int j=0;j<w[i][n].size();j++)
			hs[w[i][n][j]]=1;
	}
	if(i==2)
	{
		for(int j=0;j<w[i][n].size();j++)
		{
			if(hs[w[i][n][j]]==1&&w[i][n][j]<ans)
			{
				ans=w[i][n][j];
			}
		}
	}
}
int main()
{
	freopen("meeting.in","r",stdin);
	freopen("meeting.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		int a,b,c,d;
		scanf("%d%d%d%d",&a,&b,&c,&d);
		miku x;
		x.to=b;x.lo=c;e[1][a].push_back(x);
		x.lo=d;e[2][a].push_back(x);
	}
	bfs(1);
	bfs(2);
	
	if(ans==maxn)
		printf("IMPOSSIBLE");
	else
		printf("%d",ans);
	return 0;
}