2 solutions
-
0
#include<bits/stdc++.h> using namespace std; const int N=110,INF=0x3f3f3f3f; int n,k,m,s,t; int c[N],dist[N];//文化和到某个国家的距离 int a[N][N],g[N][N];//文化是否冲突和能否走到某个国家 bool h[N];//是否学习过某个文化 void dfs(int u,int d){ if(d>=dist[u]||d>=dist[t]) return ; dist[u]=d; if(u==t) return ; for(int i=1;i<=n;i++){ if(g[u][i]==INF) continue; if(h[c[i]]) continue; bool flag=1; for(int j=1;j<=k;j++){ if(h[j]&&a[j][c[i]]==1){ flag=0; break; } } if(flag){ h[c[i]]=1; dfs(i,d+g[u][i]); h[c[i]]=0; } } } int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); cin>>n>>k>>m>>s>>t; for(int i=1;i<=n;i++){ cin>>c[i]; } for(int i=1;i<=k;i++){ for(int j=1;j<=k;j++){ cin>>a[i][j]; } } memset(dist,0x3f,sizeof dist); memset(g,0x3f,sizeof g); for(int i=1;i<=n;i++){ g[i][i]=0; } for(int i=1;i<=m;i++){ int a,b,c; cin>>a>>b>>c; g[a][b]=g[b][a]=min(g[a][b],c); } h[c[s]]=1; dfs(s,0); if(dist[t]==INF){ cout<<-1; } else{ cout<<dist[t]; } return 0; }
Information
- ID
- 440
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- 6
- Tags
- # Submissions
- 16
- Accepted
- 6
- Uploaded By