hdu 2437(dfs)
2024-09-02 20:06:15
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2437
思路:只需用一个二维数组记录到达某点时路径长度mod k的最短路径长度,如果余数相同,就更新最小值。dfs暴搜即可。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
#define MAXN 1111
#define inf 1<<30 struct Edge{
int v,w;
Edge(int vv,int ww):v(vv),w(ww){};
}; int dist[MAXN][MAXN];//走到点i,路程长度mod k余数为j的最短路程
char num[MAXN];
int n,m,s,k,min_len,pos; vector<vector<Edge> >G; void dfs(int u,int len)
{
if(len%k==&&num[u]=='P'){
if(len<min_len){
min_len=len,pos=u;
}else if(len==min_len){
pos=min(pos,u);
}
return ;
}
for(int i=;i<G[u].size();i++){
int v=G[u][i].v,w=G[u][i].w;
if(dist[v][(len+w)%k]==-||dist[v][(len+w)%k]>(len+w)){
dist[v][(len+w)%k]=len+w;
dfs(v,len+w);
}
}
} int main()
{
int _case,u,v,w,t=;
scanf("%d",&_case);
while(_case--){
scanf("%d%d%d%d",&n,&m,&s,&k);
scanf("%s",num+);
G.clear();
G.resize(n+);
while(m--){
scanf("%d%d%d",&u,&v,&w);
G[u].push_back(Edge(v,w));
}
memset(dist,-,sizeof(dist));
min_len=inf;
dfs(s,);
if(min_len==inf){
printf("Case %d: -1 -1\n",t++);
}else
printf("Case %d: %d %d\n",t++,min_len,pos);
}
return ;
}
最新文章
- MES系统学习
- 修改NLS_DATE_FORMAT的四种方式
- ADO.Net 增、删、改、查(综合练习)
- 【多线程】--生产者消费者模式--Lock版本
- HaoZip(好压) 去广告纯净版 4.4
- ExtJS与后台Java交互
- redis---------AOF文件异常导致的redis无法载入
- nodejs 搭建简易服务器
- 06、action操作开发实战
- Postman插件使用
- WCF学习笔记一之通过配置web.config可以通过http访问接口
- springcloud 入门 10 (eureka高可用)
- loadrunner报错
- python在数据处理中常用的模块之matplotlib
- 超级好看!巧用PS将风光人像打造成唯美的小星球效果!
- 操作Wifi的工具类
- adb devices报错解决
- python使用SQLAlchemy对mysql操作
- flex 自定义tooltip
- 学习笔记,99乘法表,嵌套while循环
热门文章
- Tomcat 改服务器编码(Java 修改字符串编码格式)
- 用oracle建表,必须注意Oracle 关键字(保留字)
- eclipse中查看某个方法(函数)被谁调用
- 阿里云RDS实例内不同数据库之间的数据迁移
- ajax表单提交较慢原因的解决办法
- 摘:通过ICursor对Table进行操作(添加、修改、删除)
- webpack One CLI for webpack must be installed. These are recommended choices, delivered as separate(webpack报错)
- 查看linux系统某宏的定义(另类)
- Atitit.ALT+TAB没反应车and 点击任务栏程序闪烁但是不能切换
- CWidgetMgr---H