题目链接: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. 【COCOS2DX-LUA 脚本开发之一】在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途!

    [COCOS2DX-LUA 脚本开发之一]在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途! 分类: [Cocos2dx Lua 脚本开发 ] 2012-04-1 ...

  2. 修改NameNode端口后,hive表查询报错

    在进行使用hive查询表数据的时候,抛出异常 hive> select*from blackList;FAILED: SemanticException Unable to determine ...

  3. centos7 中文输入法设置

    安装centos7 后,他有自带的中文输入法安装包找到 applications->systemTools->settings->region&language 2:在 in ...

  4. 动态注册HttpModule管道,实现global.asax功能

    1.所用类库有 Microsoft.Web.Infrastructure.dll 和WebActivator.dll 2.类代码如下 using System; using System.Collec ...

  5. Debian NAT共享上网

    如果Linux主机有两个网卡,比如一个有线.一个无线,当无线连接后,其他机器即可通过有线共享上网,为了方便叙述,假设环境如下: A机器有两块网卡,eth0和ws0,其中ws0为无线网卡,已连接wifi ...

  6. [译]GLUT教程 - 渲染到子窗体

    Lighthouse3d.com >> GLUT Tutorial >> Subwindows >> Rendering to Subwindows 先回顾一下之前 ...

  7. C#多线程简单例子讲解

    C#多线程简单例子讲解 标签: 多线程c#threadobjectcallbacktimer 分类: C#(7) 转载网址:http://www.knowsky.com/540518.html .NE ...

  8. Hadoop2.6.0版本MapReudce示例之WordCount(一)

    一.准备测试数据 1.在本地Linux系统/var/lib/Hadoop-hdfs/file/路径下准备两个文件file1.txt和file2.txt,文件列表及各自内容如下图所示: 2.在hdfs中 ...

  9. Unity3D引擎之渲染技术系列一

    笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者.国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...

  10. Python读取word文档(python-docx包)

    最近想统计word文档中的一些信息,人工统计的话...三天三夜吧 python 不愧是万能语言,发现有一个包叫做 docx,非常好用,具体查看官方文档:https://python-docx.read ...