题目链接: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 ;
}

最新文章

  1. MES系统学习
  2. 修改NLS_DATE_FORMAT的四种方式
  3. ADO.Net 增、删、改、查(综合练习)
  4. 【多线程】--生产者消费者模式--Lock版本
  5. HaoZip(好压) 去广告纯净版 4.4
  6. ExtJS与后台Java交互
  7. redis---------AOF文件异常导致的redis无法载入
  8. nodejs 搭建简易服务器
  9. 06、action操作开发实战
  10. Postman插件使用
  11. WCF学习笔记一之通过配置web.config可以通过http访问接口
  12. springcloud 入门 10 (eureka高可用)
  13. loadrunner报错
  14. python在数据处理中常用的模块之matplotlib
  15. 超级好看!巧用PS将风光人像打造成唯美的小星球效果!
  16. 操作Wifi的工具类
  17. adb devices报错解决
  18. python使用SQLAlchemy对mysql操作
  19. flex 自定义tooltip
  20. 学习笔记,99乘法表,嵌套while循环

热门文章

  1. Tomcat 改服务器编码(Java 修改字符串编码格式)
  2. 用oracle建表,必须注意Oracle 关键字(保留字)
  3. eclipse中查看某个方法(函数)被谁调用
  4. 阿里云RDS实例内不同数据库之间的数据迁移
  5. ajax表单提交较慢原因的解决办法
  6. 摘:通过ICursor对Table进行操作(添加、修改、删除)
  7. webpack One CLI for webpack must be installed. These are recommended choices, delivered as separate(webpack报错)
  8. 查看linux系统某宏的定义(另类)
  9. Atitit.ALT+TAB没反应车and 点击任务栏程序闪烁但是不能切换
  10. CWidgetMgr---H