weinan030416

导航

算法

 

#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;
}

 

posted on 2023-03-28 15:27  楠030416  阅读(10)  评论(0编辑  收藏  举报