codevs 3983 调整(tweak)
来源:互联网 发布:移动网络优化工作 编辑:程序博客网 时间:2024/06/05 13:29
题目描述 Description
已给定一个
题目保证,
输入描述 Input Description
输入文件tweak.in。
第一行三个整数,
接下来
输出描述 Output Description
输出文件 tweak.out。
一行一个整数,要进行最少多少次操作才能使得最短路长度变为
样例输入 Sample Input
3 3 3
1 2 3
2 3 3
1 3 8
样例输出 Sample Output
1
数据范围及提示 Data Size & Hint
N<=100
M<=1000
0<=c<=100000
0<=wi<=10000
30%数据满足 M<=20
50%数据满足 M<=70
思路
显然每次调整都可以视为是把每条边变为0,最终距离小于等于
设
最终输出时输出满足
代码
#include <cstdio>#include <cstring>#include <algorithm>const int maxn=100;const int inf=0x3f3f3f3f;int n,m,c,dist[maxn+1][maxn+1];int f[maxn+1][maxn+1][maxn+1];int main(){ memset(dist,63,sizeof dist); memset(f,63,sizeof f); scanf("%d%d%d",&n,&m,&c); for(int i=1; i<=n; i++) { dist[i][i]=0; f[i][i][0]=0; } for(int i=1; i<=m; i++) { int a,b,v; scanf("%d%d%d",&a,&b,&v); dist[a][b]=v; f[a][b][0]=std::min(f[a][b][0],dist[a][b]); } for(int k=1; k<=n; k++) { for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) { f[i][j][0]=std::min(f[i][j][0],f[i][k][0]+f[k][j][0]); for(int p=1; p<=n; p++) { if(dist[k][j]!=inf) { f[i][j][p]=std::min(f[i][j][p],f[i][k][p-1]); } f[i][j][p]=std::min(f[i][j][p],f[i][k][p]+f[k][j][0]); } } } } for(int i=0; i<=n; i++) { if(f[1][n][i]<=c) { printf("%d\n",i); break; } } return 0;}
阅读全文
0 0
- codevs 3983 调整(tweak)
- ubuntu-tweak
- ios7 tweak
- Tweak工程
- elementary-tweak
- Codevs
- 何谓Tweak-GUI?
- Ubuntu: 配置工具Tweak
- 如何安装Ubuntu Tweak
- Ubuntu安装Tweak
- 4常用软件 --Ubuntu Tweak
- Ubuntu tweak ppa 安装
- 安装ubuntu-tweak
- Unity Tweak Tool:MyUnity
- Unity Tweak Tool使用
- Ubuntu Tweak使用
- 安装Ubuntu Tweak软件
- 安装ubuntu tweak
- BOM header
- thinkPHP传数组到模板页面volist每一列加一个button,点击按钮携带参数传给JS函数,跳转到不同的方法
- JQ 错误信息提示封装
- EF Code First 学习笔记:表映射
- iptables 详解(NAT)
- codevs 3983 调整(tweak)
- 读取web项目下text图片地址并在网页显示
- Android_广播机制总结
- linux启动第一个应用程序init && init启动android过程解析 && init.rc与inittab的关系 && android property和linux 环境变量
- js字符串类型的数字比较的大小
- activemq配置多个消费者
- 锁
- java客户端调用Memcached的三种方及mc的原理
- 复数型