[USACO 2010 OPEN]SLIED

传送门

某位不愿透露姓名的语文老师说过:

语文学不好将会影响到你各个学科的发展

这道题的题意描述简直有毒。题没看完一眼分层图,然后火速敲了个堆优化的dijkstra,然后就被样例教做人了QAQ

这里说的最坏的情况让我很迷茫?感觉很难判定到底什么是最坏的情况以及确定了最坏的情况应该怎么办....然后我就去扒了扒别人好几年前的代码,耐着性子把pascal的代码看完..恍然大悟..

题目那样描述确实有点不妥当,但是如果说清楚了,那这就成一个完全的裸题了。

要求在最坏的情况下收益最大,假设你现在在一个点上,你已经失误了$i$次,那么还允许你失误$K-i$次,要求最大收益。这里之所以不能采取分层图也是这个原因,到了不同的状态,图的构建方案是不同的。

所以在具体实现时,对于每个状态,需要得到

1.如果不失误,那么到目标状态的最大收益。

2.如果失误,到目标状态的最小收益。

然后对这两个值取$min$,因为题目要求的状况是worst。

 1 //oj 1601
 2 //by Cydiater
 3 //2016.10.6
 4 #include <iostream>
 5 #include <cstring>
 6 #include <string>
 7 #include <algorithm>
 8 #include <queue>
 9 #include <map>
10 #include <ctime>
11 #include <cmath>
12 #include <cstdlib>
13 #include <cstdio>
14 #include <iomanip>
15 using namespace std;
16 #define ll long long
17 #define up(i,j,n)        for(int i=j;i<=n;i++)
18 #define down(i,j,n)        for(int i=j;i>=n;i--)
19 const ll MAXN=2e5+5;
20 const ll oo=1000000000000LL;
21 inline ll read(){
22     char ch=getchar();ll x=0,f=1;
23     while(ch>‘9‘||ch<‘0‘){if(ch==‘-‘)f=-1;ch=getchar();}
24     while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();}
25     return x*f;
26 }
27 ll N,M,K,LINK[MAXN],len=0,f[MAXN][15];
28 struct edge{
29     ll y,next,v;
30 }e[MAXN];
31 bool vis[MAXN];
32 namespace solution{
33     inline void insert(int x,int y,int v){e[++len].next=LINK[x];LINK[x]=len;e[len].y=y;e[len].v=v;}
34     void init(){
35         N=read();M=read();K=read();
36         up(i,1,M){
37             ll x=read(),y=read(),v=read();
38             insert(x,y,v);
39         }
40     }
41     void dfs(int node,int fa){
42         if(vis[node])return;
43         for(int i=LINK[node];i;i=e[i].next)if(e[i].y!=fa)dfs(e[i].y,node);
44         up(j,0,K){
45             for(int i=LINK[node];i;i=e[i].next)if(e[i].y!=fa)
46                 f[node][j]=max(f[node][j],f[e[i].y][j]+e[i].v);
47             if(j<K)for(int i=LINK[node];i;i=e[i].next)if(e[i].y!=fa)
48                 f[node][j]=min(f[node][j],f[e[i].y][j+1]+e[i].v);
49             f[node][j]=max(f[node][j],0LL);
50         }
51         vis[node]=1;
52     }
53     void slove(){
54         up(i,1,N)up(j,0,K)f[i][j]=-oo;
55         memset(vis,0,sizeof(vis));
56         dfs(1,0);
57     }
58     void output(){
59         cout<<f[1][0]<<endl;
60     }
61 }
62 int main(){
63     //freopen("input.in","r",stdin);
64     using namespace solution;
65     init();
66     slove();
67     output();
68     return 0;
69 }

时间: 2024-12-20 20:21:34

[USACO 2010 OPEN]SLIED的相关文章

【[USACO 2010 FEB】给巧克力Chocolate Giving(最短路)

题目描述 Farmer John有B头奶牛(1<=B<=25000),有N(2*B<=N<=50000)个农场,编号1-N,有M(N-1<=M<=100000)条双向边,第i条边连接农场R_i和S_i(1<=R_i<=N;1<=S_i<=N),该边的长度是L_i(1<=L_i<=2000).居住在农场P_i的奶牛A(1<=P_i<=N),它想送一份新年礼物给居住在农场Q_i(1<=Q_i<=N)的奶牛B,但是奶

[ USACO 2010 FEB ] Slowing Down

\(\\\) \(Description\) 给出一棵 \(N\) 个点的树和 \(N\) 头牛,每头牛都要去往一个节点,且每头牛去往的点一定互不相同. 现在按顺序让每一头牛去往自己要去的节点,定义一头牛的代价为,路径上经过的已经有牛的节点数,求每一头牛的代价. \(N\le 10^5\) \(\\\) \(Solution\) 注意到一个节点的影响只是在其子树内,考虑 \(DFS\) 的时候直接统计答案. 在每个节点上记录到这个点的牛的编号.那么对当前点有影响的点满足: 在根到这个点的路径上\

【转】[专题学习][计算几何]

原文地址:http://www.cnblogs.com/ch3656468/archive/2011/03/02/1969303.html 基本的叉积.点积和凸包等东西就不多说什么了,网上一搜一大堆,切一些题目基本熟悉了就差不多了. 一些基本的题目可以自己搜索,比如这个blog:http://blog.sina.com.cn/s/blog_49c5866c0100f3om.html 接下来,研究了半平面交,思想方法看07年朱泽园的国家队论文,模板代码参考自我校大牛韬哥: http://www.o

[BZOJ 1652][USACO 06FEB]Treats for the Cows 题解(区间DP)

[BZOJ 1652][USACO 06FEB]Treats for the Cows Description FJ has purchased N (1 <= N <= 2000) yummy treats for the cows who get money for giving vast amounts of milk. FJ sells one treat per day and wants to maximize the money he receives over a given

USACO DEC 2019 参赛总结

USACO DEC 2019 参赛总结(2019-12-13~2019-12-16) 2019-12-19 xiaoh 金组Gold A-Milk Pumping 题意 给定一个n个点,m条边的无向图,每一条边都有一个最大流量f和一个价格c(1<=n,m<=1000,1<=c,f<=1000),找一条从1到n的路径(保证存在),求最大化Min{f}/Σ{c}的路径,将这个值×1e6取下整后输出 题解 首先,很明显,当流量最小值固定时,我们只要求满足条件的最小的Σ{c}即可.所以考虑

COGS 696. [IOI1996][USACO 2.3] 最长前缀

★   输入文件:prefix.in   输出文件:prefix.out   简单对比时间限制:1 s   内存限制:128 MB 描述 USACO 2.3.1 IOI96 在生物学中,一些生物的结构是用包含其要素的大写字母序列来表示的.生物学家对于把长的序列分解成较短的序列(即元素)很感兴趣. 如果一个集合 P 中的元素可以通过串联(元素可以重复使用,相当于 Pascal 中的 “+” 运算符)组成一个序列 S ,那么我们认为序列 S 可以分解为 P 中的元素.元素不一定要全部出现(如下例中B

部署FIM 2010 R2&mdash;&mdash;6安装和配置PCNS

部署FIM 2010 R2--6安装和配置PCNS 在所有域控安装安装PCNS 1. 如果第一次安装PSNS需要扩展构架,如果之前安装过PCNS,略过此步骤,扩展构建需要在CMD进入PCNS安装目录中运行"Password Change Notification Service.msi" SCHEMAONLY=TRUE 下载PCNS安装包,首先在每台DC上扩展架构, msiexec /i "C:\Users\Administrator\Desktop\Password Cha

部署FIM 2010 R2&mdash;5配置Synchronization Service

部署FIM 2010 R2-配置Synchronization Service 配置多有域环境账户密码同步 在各个域创建ADMA账户,并赋予对域的复制目录更改和复制目录更改所有项权限:和对用户的密码重置和解锁密码权限: 在fim01所使用的DNS服务器上,建立同步密码目标域的DNS条件转发:并测试能正常解析目标域: 确保fim01到目标域的域控制器的TCP和UDP端口389.88.464能双向正常通信: 1.打开Synchronization Service窗口, 2.选择Management

部署FIM 2010 R2&mdash;4安装FIM 2010 R2 Synchronization Service

部署FIM 2010 R2-4安装FIM 2010 R2 Synchronization Service 1.打开FIM2010 R2安装控制台,选择"Install Synchronization Service" 2.选择"下一步", 同意许可,选择"下一步", 保持默认, 3.为FIM同步服务指定数据库和实例, 4.为FIM同步服务指定服务账户,如下图,(注:Domain必须写为contoso,而不是contoso.com) 5.使用默认组