题目链接: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. PHP 使用 GeoLiteCity 库解析 IP 为地理位置

    关于把 IP 地址转换为地理位置可以使用网络上很多的 API,好处就是不用在本地存储一个 IP 数据库,而且一般网络上的 IP 库会自动更新,不利的地方就是太依赖于网络,性能表现也可能会弱些.比如像下 ...

  2. MIC中offload语法总结

    MIC中offload的用法如下: #pragma offload specifier [,specifier...]specifier可以填入的选项为:target 例:taget(mic:0)if ...

  3. 【C#学习笔记】之用button使得textbox中数字的值增减

    代码段: string t = ""; t = mv.textBox2.Text; int n = int.Parse(t); n = n + 1; mv.textBox2.Tex ...

  4. 使用Istio治理微服务入门

    近两年微服务架构流行,主流互联网厂商内部都已经微服务化,初创企业虽然技术积淀不行,但也通过各种开源工具拥抱微服务.再加上容器技术赋能,Kubernetes又添了一把火,微服务架构已然成为当前软件架构设 ...

  5. Android Studio 2.0 稳定版新特性介绍

    Android Studio 2.0 最终迎来了稳定版本号,喜大普奔. 以下这篇文章是2.0新特性的一些简介. 假设想看具体内容请看这里<Android Studio有用指南> 文章转自这 ...

  6. Ant自己主动编译打包&amp;公布 android项目

    Eclipse用起来尽管方便,可是编译打包android项目还是比較慢,尤其将应用打包公布到各个渠道时,用Eclipse手动打包各种渠道包就有点不切实际了,这时候我们用到Ant帮我们自己主动编译打包了 ...

  7. js校验密码强度

    网上转载的一段代码,留着以后用, js文件: //判断输入密码的类型 function CharMode(iN){ if (iN>=48 && iN <=57) //数字 ...

  8. QQpet exploratory park(DP)

    QQpet exploratory park Today, more and more people begin to raise a QQpet. You can get a lot of plea ...

  9. vue路由vue-route

    首先先引入插件 <script src="Vue.js"></script> //vue.js在前面 <script src="vue-ro ...

  10. ubuntu16.04下hive安装与配置

    Hive是什么? 由Facebook开源用于解决海量 结构化日志的数据统计: Hive是基于Hadoop的一个 数据仓库工具,可以将结构化的数据文件映射 成一张表,并提供类SQL查询功能: 构建在Ha ...