记录编号 |
200164 |
评测结果 |
AAAAAAAAAAAAAAA |
题目名称 |
相遇时间 |
最终得分 |
100 |
用户昵称 |
mikumikumi |
是否通过 |
通过 |
代码语言 |
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;
}