记录编号 200164 评测结果 AAAAAAAAAAAAAAA
题目名称 相遇时间 最终得分 100
用户昵称 Gravatarmikumikumi 是否通过 通过
代码语言 C++ 运行时间 0.259 s
提交时间 2015-10-28 07:13:42 内存使用 126.35 MiB
显示代码纯文本
#include<cstdio>
#include<deque>
#include<iostream>
#include<cstring>
using namespace std;
int n,m,ok=0;
int f[3][110][100010]={0},ans=0x7fffffff,maxn=0x7fffffff;
int T=0;
class miku
{
public:
	int to;
	int lo;
};
deque<miku> e[3][110];
void bfs(int x)
{
	f[x][1][0]=1;
	for(int i=1;i<=n;i++)
		for(int j=0;j<=T;j++)
		{
			if(!f[x][i][j]) continue;
			for(int k=0;k<e[x][i].size();k++)
			{
				miku r=e[x][i][k];
				if(j+r.lo<=T) f[x][r.to][j+r.lo]=1;
			}
		}
	if(x==2)
	{
		for(int j=0;j<=T;j++) 
			if(f[1][n][j]==1&&f[2][n][j]==1) 
			{
				ans=j;
				return;
			}
	}
}
int main()
{
	freopen("meeting.in","r",stdin);
	freopen("meeting.out","w",stdout);
	scanf("%d%d",&n,&m);
	int m1=0,m2=0;
	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);
		m1=max(m1,c);
		m2=max(m2,d);
	}
	T=n*max(m1,m2);
	bfs(1);
	bfs(2);
	//cout<<T<<endl;
	//for(int i=1;i<=T;i++) cout<<hs[i]<<" ";
	if(ans==maxn) printf("IMPOSSIBLE");
	else printf("%d",ans);
	return 0;
}