比赛 |
20150424 |
评测结果 |
AAAATTTTTTTTAAA |
题目名称 |
相遇时间 |
最终得分 |
46 |
用户昵称 |
STARGAZER |
运行时间 |
8.374 s |
代码语言 |
C++ |
内存使用 |
0.57 MiB |
提交时间 |
2015-04-24 11:57:24 |
显示代码纯文本
/*
1951. 会议时间
★ 输入文件:meeting.in 输出文件:meeting.out 简单对比
时间限制:1 s 内存限制:256 MB
【题目描述】
贝茜和她的姐姐要从谷仓到她们喜欢的地方旅行,他们同时离开谷仓,并同时到达她们喜欢的地点。
农场是一个集合,包括N个地域(1≤N≤100)编号1 ..N,1号地点包含了谷仓,N号是她们喜欢的地域。
农场建在山边,X<Y表示X的海拔比Y高。有M条路径连接各个地域。然而,由于每条路径是相当陡峭的,
所以只能下坡。例如,一条路径连接地域5和地域8,可在5 --> 8方向行进,而不能是其他方向,
因为这将是上坡的。每两个地域由至多一条路径连接,所以M <= N(N-1)/2。
贝茜和爱丽丝可能以不同的时间通过一条路径;例如,贝茜可能需要10单位的时间,爱丽丝需要20或更多。
此外,贝茜和爱丽丝只在旅行时的路径上消耗时间,因为她们很忙,他们总是零时间通过一个地域,不会在任何地方等待。
请帮助确定最短时间,贝茜和爱丽丝必须采取以完全相同的时刻达到他们最喜欢的地域。
【输入格式】
输入的第一行包含N和M,用一个空格隔开。
之后的每一行描述一个路径使用四个整数A,B,C,D,其中A和B(A< B)是路径,C是贝茜通过路径所需的时间,
D是爱丽丝通过路径所需的时间。C和D在范围1..100。
【输出格式】
一个整数,给出所需的最小时间,贝茜和爱丽丝到达她们最喜欢的地域,在同一时刻到达。
如果这是不可能的,或者是没有办法到达贝茜和爱丽丝喜欢的地域,输出单独一行, "IMPOSSIBLE"。
【样例输入】
3 3
1 3 1 2
1 2 1 2
2 3 1 2
【样例输出】
2
【提示】
样例解释:
贝茜在每条路径上速度都是爱丽丝的两倍,贝茜走路径1--> 2 --> 3,爱丽丝走路径1 --> 3,她们会同一时间到达。
*/
#include<cstdio>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> T(2,0),B,A;
vector<vector<int> > v(101,T);
vector<vector<vector<int> > > map(101,v);
int n,m,a,b;
void dfs(int x,int c,int t)
{
if(x==n)
{
switch(c)
{
case 0: B.push_back(t);break;
case 1: A.push_back(t);
}
}
else
{
for(int i=x+1;i<=n;i++)
{
if(map[x][i][c]!=0)
dfs(i,c,t+map[x][i][c]);
}
}
}
int main()
{
freopen("meeting.in","r",stdin);
freopen("meeting.out","w",stdout);
cin>>n>>m;
for(int i=0;i<m;i++)
{
cin>>a>>b;
cin>>map[a][b][0]>>map[a][b][1];
}
dfs(1,0,0);
dfs(1,1,0);
if(A.empty())
{
cout<<"IMPOSSIBLE"<<endl;
return 0;
}
sort(A.begin(),A.end());
sort(B.begin(),B.end());
for(int i=0;i<A.size();i++)
{
for(int j=0;j<B.size()&&B[j]<=A[i];j++)
{
if(A[i]==B[j])
{
cout<<A[i]<<endl;
return 0;
}
}
}
cout<<"IMPOSSIBLE"<<endl;
return 0;
}