8.10-Day2T3 镇守府
emm
IOI原题(洛谷,bzoj都有)
其实并没有怎么搞懂dp方程转移那部分
就...粘个(抄来的)代码过来吧
#include<bits/stdc++.h>
using namespace std; inline int read()
{
int sum = ,p = ;
char ch = getchar();
while(ch < '' || ch > '')
{
if(ch == '-')
p = -;
ch = getchar();
}
while(ch >= '' && ch <= '')
{
(sum *= ) += ch - '';
ch = getchar();
}
return sum * p;
} const int N = ,M = ;
const int inf = 0x3f3f3f3f;
int n,m,head[N],w[N],f[N],cnt;
int dis[N][N],dp[N][M][N];
struct edge
{
int nxt,to;
}e[N]; void add(int a,int b)
{
e[++cnt].nxt = head[a];
e[cnt].to = b;
head[a] = cnt;
} void dfs(int u)
{
for(int last = u,i = f[u]; i != -; i = f[i])
{
dis[u][i] = dis[u][last] + dis[last][i];
last = i;
}
for(int i = head[u]; i; i = e[i].nxt)
dfs(e[i].to);
} void tree_dp(int u)
{
bool flag = true;
for(int i = head[u]; i; i = e[i].nxt)
{
flag = false;
tree_dp(e[i].to);
}
if(flag)
{
for(int i = f[u]; i != -; i = f[i])
dp[u][][i] = dis[u][i] * w[u];
return;
}
if(u != )
dp[u][][u] = inf;
for(int i = head[u]; i; i = e[i].nxt)
{
int v = e[i].to;
for(int p = f[u]; p != -; p = f[p])
{
for(int j = m; j >= ; j--)
{
int tmp = inf;
for(int k = ; k <= j; k++)
tmp = min(tmp,dp[u][k][p] + dp[v][j - k][p]);
dp[u][j][p] = tmp;
}
}
for(int j = m; j >= ; j--)
{
int tmp = inf;
for(int k = (u != ); k <= j; k++)
tmp = min(tmp,dp[u][k][u] + dp[v][j - k][u]);
dp[u][j][u] = tmp;
}
}
for(int p = f[u]; p != -; p = f[p])
for(int i = ; i <= m; i++)
{
dp[u][i][p] += dis[u][p]*w[u];
dp[u][i][p] = min(dp[u][i][p],dp[u][i][u]);
}
} int main()
{
freopen("riv.in","r",stdin);
freopen("riv.out","w",stdout);
n = read(),m = read();
for(int i = ; i <= n; i++)
{
w[i] = read();
f[i] = read();
dis[i][f[i]] = read();
add(f[i],i);
}
f[] = -;
dfs();
tree_dp();
printf("%d\n",dp[][m][]);
return ;
}
8.10-Day2T3 镇守府的更多相关文章
- ACM-南京理工大学第八届程序设计竞赛-网络赛(2016.04.17)
A.偷吃糖果Time Limit: 1000Ms Memory Limit: 65536KB Description小鱼喜欢吃糖果.他有两盒糖果,两盒糖果分别仅由小写字母组成的字符串s和字符串t构成. ...
- 【hihoCoder】#1133 : 二分·二分查找之k小数
题目描述 在上一回里我们知道Nettle在玩<艦これ>,Nettle的镇守府有很多船位,但船位再多也是有限的.Nettle通过捞船又出了一艘稀有的船,但是已有的N(1≤N≤1,000,00 ...
- Hiho : 二分·二分查找之k小数
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上一回里我们知道Nettle在玩<艦これ>,Nettle的镇守府有很多船位,但船位再多也是有限的.Nettl ...
- hihoCoder 1133 二分·二分查找之k小数(TOP K算法)
#1133 : 二分·二分查找之k小数 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上一回里我们知道Nettle在玩<艦これ>,Nettle的镇守府有很 ...
- 【HIHOCODER 1133】 二分·二分查找之k小数
描述 在上一回里我们知道Nettle在玩<艦これ>,Nettle的镇守府有很多船位,但船位再多也是有限的.Nettle通过捞船又出了一艘稀有的船,但是已有的N(1≤N≤1,000,000) ...
- 谁才是最强战舰!-From 南京理工大学第八届程序设计大赛(校外镜像),博弈~~
谁才是最强战舰! Time Limit: 1000MS Memory Limit: 65536KB Description 依阿华来到镇守府的第一件事情,就是找大和solo!然而这并不是什么好消息,说 ...
- hiho week 37 P1 : 二分·二分查找之k小数
P1 : 二分·二分查找之k小数 Time Limit:10000ms Case Time Limit:1000ms Memory Limit:256MB 描述 在上一回里我们知道Nettle在玩&l ...
- “乐”动人心--2017年10款最佳音乐类APP设计盘点
在上下班的路上,听几首自己喜欢的音乐来打发无聊的等公交车和地铁的时间是现代年轻人的常态.音乐作为最能鼓动人心的"语言",也成为了人们在互联网生活里占比例最高的消费活动之一,一款好看 ...
- 如何用Python统计《论语》中每个字的出现次数?10行代码搞定--用计算机学国学
编者按: 上学时听过山师王志民先生一场讲座,说每个人不论干什么,都应该学习国学(原谅我学了计算机专业)!王先生讲得很是吸引我这个工科男,可能比我的后来的那些同学听课还要认真些,当然一方面是兴趣.一方面 ...
随机推荐
- vjudge A^B Mod C 然后,10.6最。。。的 快速幂!!!
链接:https://vjudge.net/contest/331993#problem/D 给出3个正整数A B C,求A^B Mod C. 例如,3 5 8,3^5 Mod 8 = 3. Inpu ...
- A - Wireless Network POJ - 2236-kuangbin带你飞
A - Wireless Network POJ - 2236 Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 50348 ...
- 微信小程序scroll-view去除滚动条
css代码: .father{ //父元素 width: 100vw; height: 100vh; overflow-x: hidden; overflow-y: auto; } //隐藏滚动条 : ...
- Gin_渲染
1. 各种数据响应格式 package main import ( "github.com/gin-gonic/gin" "github.com/gin-gonic/gi ...
- [P3935] Calculating - 整除分块
容易发现题目要求的 \(f(x)\) 就是 \(x\) 的不同因子个数 现在考虑如何求 \(\sum_{i=1}^n f(i)\),可以考虑去算每个数作为因子出现了多少次,很容易发现是 \([n/i] ...
- Java 并发核心机制
目录 一.J.U.C 简介 二.synchronized 三.volatile 四.CAS 五.ThreadLocal 参考资料
- 洛谷P1093 奖学金
https://www.luogu.org/problem/P1093 #include <bits/stdc++.h> using namespace std; struct Node{ ...
- POJ2456 Aggressive cows(二分)
链接:http://poj.org/problem?id=2456 题意:一个数轴上n个点,每个点一个整数值,有c个奶牛,要放在这些点的某几个上,求怎么放可以使任意两个奶牛间距离的最小值最大,求这个最 ...
- VSFTPD服务器
我虽然vsftpd服务器做了百遍以上,但是我觉的成功率不大.我要写下这篇日记,来让我分析自己曾经的过错!! vsftpd的原理我不多讲!!!请自行百度吧!! 我搭建的环境是 Linux6.4 IP(1 ...
- 剑指offer 面试题. 剪绳子
题目描述 给你一根长度为n的绳子,请把绳子剪成整数长的m段(m.n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m].请问k[0]xk[1]x...xk[ ...