题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3890

题意:

  给你一个有向图,n个点(n <= 100),m条边。

  且所有的边都是从编号小的点指向编号大的点。

  对于每条边i,Bessie要用c[i]的时间,Elsie要用d[i]的时间(c,d <= 100)。

  Bessie和Elsie从1号点出发,向n号点走去,且两人都不会在路上停留。

  问你使两人同时到达n点的最小时间。若不可能同时到达,输出"IMPOSSIBLE"。

题解:

  表示状态:

    bool f[i][j] and g[i][j]

    分别表示Bessie和Elsie是否能够同时到达i号点,且花费时间为j。

  找出答案:

    min i with f[n][i] and g[n][i]

    即两人同时到达n的最短时间

  如何转移:

    对于每个点i,一定是从某些编号比i小的点转移而来。

    所以从小到大枚举点i,然后枚举到达时间j,再枚举i能够到达的下一个点dst。

    顺推:

      f[dst][j+c] |= f[i][j]

      g[dst][j+d] |= g[i][j]

  边界条件:

    f[1][0] = g[1][0] = true

AC Code:

 #include <iostream>
#include <stdio.h>
#include <string.h>
#include <vector>
#define MAX_N 105
#define MAX_T 10005 using namespace std; struct Edge
{
int dest;
int c;
int d;
Edge(int _dest,int _c,int _d)
{
dest=_dest;
c=_c;
d=_d;
}
Edge(){}
}; int n,m;
int ans=-;
int f[MAX_N][MAX_T];
int g[MAX_N][MAX_T];
vector<Edge> edge[MAX_N]; void read()
{
cin>>n>>m;
int a,b,c,d;
for(int i=;i<m;i++)
{
cin>>a>>b>>c>>d;
edge[min(a,b)].push_back(Edge(max(a,b),c,d));
}
} void solve()
{
memset(f,false,sizeof(f));
memset(g,false,sizeof(g));
f[][]=true;
g[][]=true;
for(int i=;i<=n;i++)
{
for(int j=;j<MAX_T;j++)
{
if(f[i][j] || g[i][j])
{
for(int k=;k<edge[i].size();k++)
{
Edge temp=edge[i][k];
f[temp.dest][j+temp.c]|=f[i][j];
g[temp.dest][j+temp.d]|=g[i][j];
}
}
}
}
for(int i=;i<MAX_T;i++)
{
if(f[n][i] && g[n][i])
{
ans=i;
break;
}
}
} void print()
{
if(ans==-) cout<<"IMPOSSIBLE"<<endl;
else cout<<ans<<endl;
} int main()
{
read();
solve();
print();
}

最新文章

  1. ConcurrentHashMap内存泄漏问题
  2. iOS 分享至友盟分享
  3. 有关默认相机转VR相机
  4. jahshaka 2.0 环境配置
  5. RMQ问题(线段树+ST算法)
  6. varnish esi出现no esi processing, first char not ‘&lt;’的错误处理方式
  7. OCP-1Z0-051-题目解析-第12题
  8. 对Extjs中store的多种操作
  9. 人工智能一:Al学习路线
  10. 使用Spring Session实现Spring Boot水平扩展
  11. JavaScript基础笔记(五) 函数表达式
  12. select 下拉选中
  13. docker 命令随笔
  14. Redis 配置节
  15. SpringMVC中在web.xml中添加中文过滤器的写法
  16. ubuntu 系统网络突然&quot;网络已禁用&quot;
  17. 后缀树 &amp; 后缀数组
  18. 强悍的javascript手势库
  19. Class and Instance Variables In Ruby
  20. 3.Queues(队列)

热门文章

  1. oracle复合索引的选择和使用
  2. Vim使用个人心得
  3. 机器学习2—K近邻算法学习笔记
  4. 解决:Adb connection Error:远程主机强迫关闭了一个现有的连接
  5. userdel命令
  6. 批处理--复制,解压文件,goto,nul
  7. Linux中的关机
  8. 贝塞尔曲线与CAShapeLayer的关系以及Stroke动画
  9. Android 适配(一)
  10. maven;spring;pom