文化之旅
来源:互联网 发布:mac bash 3.2 编辑:程序博客网 时间:2024/04/29 17:13
QAQ
DFS 爆搜+剪枝
#include <cstdio>#include <iostream>#include <cstring>#include <queue>using namespace std;bool vis[10001];bool ok[10001][10001];int dis[10001],w[1001];int head[200000],net[200000],to[200000],cost[200000],cnt;int n,k,s,t,m;int ans=1e8;queue <int> dl;int wx[999],cntx;void add(int x,int y,int z){ cnt++; cost[cnt]=z; to[cnt]=y; net[cnt]=head[x]; head[x]=cnt;}bool check(int q){ int xx=w[q]; //if(vis[xx]) return 0; for(int i=1;i<=cntx;i++) if(ok[xx][wx[i]]) return 0; return 1;}void dfs(int x,int Dis){ //printf("%d\n",x); if(x==s) { ans=min(Dis,ans); return; } for(int i=head[x];i;i=net[i]) { int p=to[i]; if(dis[x]+cost[i]>=dis[p]||vis[w[p]]) continue; dis[p]=dis[x]+cost[i]; if(check(p)) vis[w[p]]=1,wx[++cntx]=w[p],dfs(p,Dis+cost[i]),vis[w[p]]=0,cntx--; }}int main(){ memset(dis,127/3,sizeof(dis)); scanf("%d%d%d%d%d",&n,&k,&m,&t,&s); for(int i=1;i<=n;i++) scanf("%d",&w[i]); for(int i=1;i<=k;i++) for(int j=1;j<=k;j++) scanf("%d",&ok[i][j]); for(int i=1;i<=m;i++) { int u,v,d; scanf("%d%d%d",&u,&v,&d); add(u,v,d),add(v,u,d); } memset(vis,0,sizeof(vis)); dis[t]=0; wx[1]=w[t];cntx=1; vis[w[t]]=1; dfs(t,0); //printf("%d",dis[t]); if(ans==1e8) ans=-1; //vis[1]=1; printf("%d",ans); return 0;}
阅读全文
0 0
- culture文化之旅
- 文化之旅
- [noip2012pj] 文化之旅
- 【BFS】 文化之旅
- P1078 文化之旅
- 文化之旅
- 文化之旅
- P1078 文化之旅
- NOIP2012P4 文化之旅 题解
- Vijos P1794 文化之旅
- 洛谷 P1078 文化之旅
- 洛谷 P1078 文化之旅
- 【原创】【NOIP】文化之旅
- 算法提高 文化之旅
- 洛谷 P1078 文化之旅
- 洛谷P1078 文化之旅
- [洛谷 P1078]文化之旅
- NOIP2012 JuniorT4 文化之旅
- Spring Boot 官方文档学习(一)入门及使用
- 优雅的QSignleton (二) MonoSingleton单例实现
- 大学生们颤抖吧,中学生已经开始学Python了!
- 关于app的logo广告页的制作
- 优雅的QSignleton (三) 通过属性器实现Singleton
- 文化之旅
- 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云服务架构