题目链接: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();
}

BZOJ 3890 [Usaco2015 Jan]Meeting Time:拓扑图dp的更多相关文章

  1. 3890: [Usaco2015 Jan]Meeting Time( dp )

    简单的拓扑图dp.. A(i, j), B(i, j) 表示从点 i 长度为 j 的两种路径是否存在. 用bitset就行了 时间复杂度O(m) --------------------------- ...

  2. [BZOJ 3888] [Usaco2015 Jan] Stampede 【线段树】

    题目链接:BZOJ - 3888 题目分析 首先,计算出每个线段在 x 坐标 0 处出现的时间开始点和结束点,就转成了时间轴上的线段. 然后就是看每条线段是否被 y 比它小的线段完全覆盖了.注意求出的 ...

  3. bzoj 1700: [Usaco2007 Jan]Problem Solving 解题 ——dp

    Description 过去的日子里,农夫John的牛没有任何题目. 可是现在他们有题目,有很多的题目. 精确地说,他们有P (1 <= P <= 300) 道题目要做. 他们还离开了农场 ...

  4. BZOJ 2021 [Usaco2010 Jan]Cheese Towers:dp + 贪心

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2021 题意: John要建一个奶酪塔,高度最大为m. 他有n种奶酪.第i种高度为h[i]( ...

  5. BZOJ 1677 [Usaco2005 Jan]Sumsets 求和:dp 无限背包 / 递推【2的幂次方之和】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1677 题意: 给定n(n <= 10^6),将n分解为2的幂次方之和,问你有多少种方 ...

  6. bzoj3890 [Usaco2015 Jan]Meeting Time

    Description Bessie and her sister Elsie want to travel from the barn to their favorite field, such t ...

  7. bzoj 1677: [Usaco2005 Jan]Sumsets 求和【dp】

    设f[i]为i的方案数,f[1]=1,考虑转移,如果是奇数,那么就是f[i]=f[i-1]因为这1一定要加:否则f[i]=f[i-1]+f[i>>1],就是上一位+1或者i/2位所有因子乘 ...

  8. BZOJ 3887: [Usaco2015 Jan]Grass Cownoisseur tarjan + spfa

    Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) ...

  9. BZOJ3887 [Usaco2015 Jan] Grass Cownoisseur 【tarjan】【DP】*

    BZOJ3887 [Usaco2015 Jan] Grass Cownoisseur Description In an effort to better manage the grazing pat ...

随机推荐

  1. datatable 常用参数

    DataTables(http://www.datatables.net/)应该是我到目前为止见过的,功能最强大的表格解决方案(当然,不计算其它整套框架中的table控件在内). 先把它主页上写的特性 ...

  2. Ubuntu下VirtualBox虚拟机与主机机互相ping通的简单配置心得

    virtualbox 是个非常优秀的软件,通常与主机之间有3种方式,Bridged方式,NAT方式,host-only方式,安装的默认方式是NAT,可是这样的方式在virtualbox虚拟机下有个缺点 ...

  3. 读取Excel中的数据到DataSet

    读取Excel中的数据到DataSet 1.引用命名空间 using System.Data.OleDb; 2.输入Excel文件,输出DataSet public DataSet ExecleDs( ...

  4. java解析字符串拆分单独元素

    有时候,需求要求传递多个字符串参数,但是方法参数已经固定为单个String,笔者在学习unity和android之间的消息传递时就遇到这个问题,所以就写了这么一个解析字符串拆分单独元素的方法. 示例: ...

  5. @media screen 针对不同移动设备——响应式设计

    概念: device-pixel-ratio:定义输入设备屏幕的可视宽度与可见高度比率. device-width:输入设备屏幕的可视宽度. orientation :屏幕横竖屏定向.landscap ...

  6. - WebStorm 转载【干货技术贴】之-mac下如何安装WebStorm + 破解

    写在前面 之前公司不忙的时候,用闲暇功夫想学习React-Native 苦于找不到一款好的代码编辑器,在广泛搜索以后,发现最适合的就是网页代码编辑器WebStrom,所以就尝试安装和破解,下面我将自己 ...

  7. 自学宝典:10个学习Android开发的网站推荐

    1. Android Developers 作为一个Android开发者,官网的资料当然不可错过,从设计,培训,指南,文档,都不应该错过,在以后的学习过程中慢慢理解体会. 2. Android Gui ...

  8. RecyclerView的使用(3)之加入Header和Footer

    原创文章.转载请注明 http://blog.csdn.net/leejizhou/article/details/50742544 李济洲的博客 RecyclerView尽管作为ListView的替 ...

  9. ACM暑假集训第三周小结

    这一周学的图论,学了这么些 两种存图的方法:邻接矩阵( map[n][n] ) , 邻接表( headlis[n] , vector<int> G[n] )存图的方法,各有各的好,我的理解 ...

  10. elasticsearch从入门到出门-05-集群之踩坑

    自己搭的集群, 设备: win10 + ubuntu 16 的虚拟机一个: 下载的版本:elasticsearch-5.2.0 win10 解压下就好了,不说了. ubuntu 上,我想说多了都是泪! ...