算法
#include<bits/stdc++.h> using namespace std; int N,M,K,T,Time[100],Begin[100],To[100][100][100],Total[100]; bool Have[100]; void dfs(int i,int j,int min){//深度优先搜索 for(int t=0;t<N;t++){ if(To[i][j][t]!=0&&!Have[t]){ Total[t]=min+To[i][j][t];//得到t种子的时间 } if(min+To[i][j][t]>Total[t]){ Total[t]=min+To[i][j][t];//得到t种子的时间 } dfs(i,t,Total[t]); dfs(j,t,Total[t]); } return; } int main() { cin>>N>>M>>K>>T; for(int i=0;i<N;i++){ cin>>Time[i];//记录时间 } for(int i=0;i<M;i++){ int t; cin>>t; Have[t]=true; Total[t]=0; } for(int i=0;i<K;i++){ int a,b,c; cin>>a>>b>>c;//杂交方案 To[a][b][c]=To[b][a][c]=max(Time[a],Time[b]); } for(int i=0;i<N;i++){ for(int j=i+1;j<N;j++){ if(Have[i]&&Have[j]){ dfs(i,j,0); } } } cout<<Total[T]; return 0; }