蓝桥杯 作物杂交 DFS搜索
生活随笔
收集整理的這篇文章主要介紹了
蓝桥杯 作物杂交 DFS搜索
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
參考代碼:
#include<bits/stdc++.h> #define INF 0x3f3f3f3f using namespace std; typedef long long ll; int cost[2005]; //記錄每個作物雜交所需要的時間 int dis[2005]; //記錄每個作物到t點的最短時間 struct node{ //結構體存儲每種雜交方案 int a, b, time; }; vector<node> solution[2005]; //記錄每個種子可以由哪些作物雜交而來 int dfs(int v) //dfs深搜 {if(dis[v] != INF) //邊界條件:當前種子存在時直接返回所需時間,此時若不是INF,那么一定已經是最小時間 return dis[v];node w;for(int i = 0; i < solution[v].size(); i++) //遍歷雜交方案 {w = solution[v][i];dis[v] = min(dis[v], max(dfs(w.a), dfs(w.b))+w.time);}return dis[v]; }int main() {ios::sync_with_stdio(false); int n, m, k, t;cin >> n >> m >> k >> t;for(int i = 1; i <= n; i++){cin >> cost[i];}fill(dis, dis+2005, INF); int t_seed;for(int i = 1; i <= m; i++){cin >> t_seed;dis[t_seed] = 0; //等于0表示當前時間為0,即初始擁有的種子 }int ta, tb, tt;for(int i = 1; i <= k; i++){cin >> ta >> tb >> tt;node temp;temp.a = ta;temp.b = tb;temp.time = max(cost[ta], cost[tb]); //作物雜交的時間 solution[tt].push_back(temp); //將當前方案放入生成的種子的vector里 }dfs(t);cout << dis[t]; //輸入終點t的最短時間 return 0; }總結
以上是生活随笔為你收集整理的蓝桥杯 作物杂交 DFS搜索的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 嘴巴上起泡是怎么回事
- 下一篇: android开发笔记之Makefile