拓扑序+dp Codeforces Round #374 (Div. 2) C
2024-09-16 10:31:23
http://codeforces.com/contest/721/problem/C
题目大意:给你有向路,每条路都有一个权值t,你从1走到n,最多花费不能超过T,问在T时间内最多能访问多少城市?
思路:dp确实好玩,然而我不会TAT
首先我们定义dp[i][j]表示从i走到n,途中经过j个城市所需要的花费。接下来就枚举拓扑序就好了
//看看会不会爆int!数组会不会少了一维!
//取物问题一定要小心先手胜利的条件
#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define ALL(a) a.begin(), a.end()
#define pb push_back
#define mk make_pair
#define fi first
#define se second
#define haha printf("haha\n")
const int maxn = + ;
vector<pair<int, int> > G[maxn];
int n, m, T;
bool vis[maxn];
int par[maxn][maxn], dp[maxn][maxn];
///定义从i走到n,经过j个地方所需要的最小时间花费 void dfs(int u){
vis[u] = true;
int len = G[u].size();
for (int i = ; i < len; i++){
pair<int, int> p = G[u][i];
int v = p.fi, val = p.se;
if (!vis[v]) dfs(v);
for (int j = ; j <= n; j++){
if (dp[u][j] > dp[v][j - ] + val){
dp[u][j] = dp[v][j - ] + val;
par[u][j] = v;
}
}
}
} int main(){
cin >> n >> m >> T;
memset(dp, 0x3f, sizeof(dp));
dp[n][] = ;
for (int i = ; i <= m; i++){
int u, v, val;
scanf("%d%d%d", &u, &v, &val);
G[u].pb(mk(v, val));
}
memset(par, -, sizeof(par));
dfs();
/*
for (int i = 1; i <= n; i++){
for (int j = 1; j <= n; j++){
///printf("%d ", dp[i][j]);
printf("%d ", par[i][j]);
}
printf("\n");
}
*/
for (int i = n; i >= ; i--){
if (dp[][i] <= T){
printf("%d\n", i);
for (int j = ; j != -; j = par[j][i], i--){
printf("%d ", j);
}
break;
}
}
return ;
}
最新文章
- 使用Mysql Workbench 画E-R图
- HuffmanTree的浅析和在C#中的算法实现
- 布局之按钮的图片分辨率--Android Studio
- Winform中DockPanel(引用WeifenLuo.WinFormsUI.Docking.dll组件)的使用
- 结合ItemsControl在Canvas中动态添加控件的最MVVM的方式
- uTenux&mdash;&mdash;HelloWord
- Apache,添加虚拟目录
- WebLogic启动时报错
- IOS的UITextField,UIButton,UIWebView它描述的一些属性和IOS提示图像资源
- linux命令类型及执行顺序
- Dom4J配合XPath解析schema约束的xml配置文件问题
- Scala面向对象详解
- C# 移除Response Header,403调整返回为404Make IIS return a 404 status code instead of 403
- 【Spring】SpringMVC之异常处理
- ThinkPHP Mongo驱动update方法支持upsert参数
- Python:字典操作总结
- 【WPF】RenderTransform和LayoutTransform
- Cognos权限Custom Java Provider表结构实例
- java------守护线程与非守护线程
- Python: 去掉字符串中的非数字(或非字母)字符