P1078 文化之旅
来源:互联网 发布:黄一琳淘宝店 编辑:程序博客网 时间:2024/04/29 16:13
题目链接
搜索过的。
不过中间加上一个类似spfa里面的松弛优化。
数据好像比较水。
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std;const int M=107*107;int n,m,s,t,k;int b[109][109],c[109];int vis[101];int ans=1e9;int dis[109][109],st[109],top;int d[109];void dfs(int u,int cost){ if(cost>=ans) return; if(u==t) { if(ans>cost) ans=cost; return; } for(int j=1;j<=n;j++) if(!vis[j]&&cost+dis[u][j]<ans&&d[j]>dis[u][j]+cost) { int flag=0; for(int i=1;i<=top;i++) if(vis[st[i]]&&b[c[j]][c[st[i]]]) { flag=1; break; } if(flag) continue; d[j]=dis[u][j]+cost; vis[j]=1; st[++top]=j; dfs(j,cost+dis[u][j]); vis[j]=0; top--; }} int main(){ //freopen("a.txt","r",stdin); memset(dis,127/3,sizeof(dis)); memset(d,127/3,sizeof(d)); scanf("%d%d%d%d%d",&n,&k,&m,&s,&t); for(int i=1;i<=n;i++) scanf("%d",&c[i]); for(int i=1;i<=k;i++) for(int j=1;j<=k;j++) scanf("%d",&b[i][j]); for(int i=1;i<=k;i++) b[i][i]=1; for(int i=1;i<=m;i++) { int u,v,d; scanf("%d%d%d",&u,&v,&d); dis[u][v]=min(d,dis[u][v]); dis[v][u]=min(d,dis[v][u]); } //memset(vis,0,sizeof(vis)); vis[s]=1;st[++top]=s;d[s]=1; dfs(s,0); if(ans!=1e9) printf("%d",ans); else printf("-1\n"); return 0;}
阅读全文
0 0
- P1078 文化之旅
- P1078 文化之旅
- 洛谷 P1078 文化之旅
- 洛谷 P1078 文化之旅
- 洛谷 P1078 文化之旅
- 洛谷P1078 文化之旅
- [洛谷 P1078]文化之旅
- 洛谷P1078 文化之旅
- luogu P1078 文化之旅
- Floyd 洛谷P1078 文化之旅
- culture文化之旅
- 文化之旅
- [noip2012pj] 文化之旅
- 【BFS】 文化之旅
- 文化之旅
- 文化之旅
- NOIP2012P4 文化之旅 题解
- Vijos P1794 文化之旅
- 文化之旅
- Ubuntu 14.04 LTS 版本(仅对32位操作系统,i686)下,安装 Java SE Development Kit 8u152(JDK 1.8.0_152)
- python一行代码实现人脸识别
- jQuery中调用WebService方法小结
- Hibernate框架
- P1078 文化之旅
- MFC 编辑框回车闪退问题
- 如何在NVMe SSD上安装Win7?手把手教你
- Spring cloud云服务架构
- Centos6.5安装Tomcat
- 三分钟玩转jQuery.noConflict()
- 微信公众平台 ---------java实现二维码带参生成本地图片(2017/11/10更新版)
- Struts result param设置
- JavaScript