1273 旅行計畫
codility
基準時間限制:1 秒 空間限制:131072 kb 分值: 80
難度:5級演算法題
某個國家有n個城市,編號0 至 n-1,他們之間用n - 1條道路連線,道路是雙向行駛的,沿著道路你可以到達任何乙個城市。你有乙個旅行計畫,這個計畫是從編號k的城市出發,每天到達乙個你沒有去過的城市,並且旅途中經過的沒有去過的城市盡可能的多(如果有2條路線,經過的沒有去過的城市同樣多,優先考慮編號最小的城市),直到所有城市都觀光過一遍。現在給出城市之間的交通圖t,以及出發地點k,你來設計乙個旅行計畫,滿足上面的條件。例如:
第1天 從2到0 (城市 1 和 0 變成去過的)
第2天 從0到6 (城市 4 和 6 變成去過的)
第3天 從6到3 (城市 3 變成去過的)
第4天 從3到5 (城市 5 變成去過的)
上圖的輸入資料為:0 1 2 2 1 4。共7個節點,除節點0之外,共6行資料。
第1個數0表示1到0有1條道路。
第2個數1表示2到1有1條道路。
input
第1行:2個數n,k(1 <= n <= 50000, 0 <= k <= n - 1)output第2 - n + 1行:每行乙個數,表示節點之間的道路。
輸出旅行的路線圖,即每天到達的城市編號。input示例
7 201output示例2214
206解:很明顯目標城市一定是葉子節點,關鍵是怎麼實現;35
一開始按照題目條件一步一步模擬,結果中間環節處理的很複雜;如果按照巨集觀的角度來考慮的話節點深度大的 節點編號小的一定先處理(不會被影響) 倒著遍歷一遍 他的節點數量就是沒被訪問過的節點數量
#include #include #include #include #include #include #include #include #include #include #include #include using namespace std;
const int n = 50000+10;
typedef long long ll;
vectorp[n];
int fax[n], vis[n];
struct node
for(int i=0;i
51nod1273 旅行計畫 貪心
某個國家有n個城市,編號0 至 n 1,他們之間用n 1條道路連線,道路是雙向行駛的,沿著道路你可以到達任何乙個城市。你有乙個旅行計畫,這個計畫是從編號k的城市出發,每天到達乙個你沒有去過的城市,並且旅途中經過的沒有去過的城市盡可能的多 如果有2條路線,經過的沒有去過的城市同樣多,優先考慮編號最小的...
51nod1442 士兵的旅行
裸網路流拆點就可以了。include include include includeusing namespace std define rep i,s,t for int i s i t i define dwn i,s,t for int i s i t i define clr x,c mem...
51nod 1442 士兵的旅行(最大流)
經典網路流模型。虛擬源點,匯點,拆點。拆點是因為每個士兵只能走一步。拆點後可以保證士兵只能走一步遠。然後判斷是否滿流和移動前人數總和是否等於移動後人數總和。include using namespace std const int maxn 1010 const int inf 0x7fffffff...