安慰員工(cheer.pas/c/cpp)
【題目描述】
longdd 變得非常懶, 他不想再繼續維護供員工之間供通行的道路. 道路被用來連
接n(5 <= n <= 10,000)個房子, 房子被連續地編號為 1..n. 每乙個房子都是乙個
員工的家. longdd計畫除去 p(n-1 <= p <= 100,000)條道路中盡可能多的道路, 但
是還要保持房子之間的連通性. 你首先要決定那些道路是需要保留的 n-1 條道路.
第j條雙向道路連線了房子 s_j和e_j (1 <= s_j <= n; 1 <= e_j <= n; s_j != e_j),
而且走完它需要l_j (0 <= l_j <= 1,000)的時間.沒有兩個房子是被一條以上的道
路所連線.
員工們非常傷心, 因為她們的交通系統被削減了. 你需要到每乙個員工的住處去安
慰她們. 每次你到達第 i 個房子的時候(即使你已經到過), 你必須花去 c_i (1 <=
c_i <= 1,000)的時間和員工交談.
你需要從某乙個房子出發(這是供你選擇的),並最終回到這個房子。期間,你要經
過每個房子至少一次,並且當你經過某個房子的時候,你必須和這個房子裡的員工
交談(即使你已經到過).
假設longdd 採納了你的建議, 請計算出使所有員工都被安慰的最少時間.
【輸入格式】
* 第 1 行: 用空格隔開的兩個整數 n和p
* 第 2..n+1 行: 第i+1 行包含了乙個整數: c_i
* 第 n+2..n+p+1 行: 第 n+j+1 行包含用空格隔開的三個整數: s_j, e_j 和 l_j
【輸入樣例】
5 7
10 10
20 6
30 1 2 5
2 3 5
2 4 12
3 4 17
2 5 15
3 5 6
4 5 12
這道題比較水但是當時出現了特別奇葩的錯誤
教訓:記得判斷邊界(無論你如何相信不會超出邊界 但很有可能他還是會超出邊界)
裸的最小生成樹吧
由於去掉邊後形成的是乙個有迴路的樹
每條邊必然被使用兩次
所以邊權值為二倍長度 + 兩端點的代價
而出發點並沒有計算在內 所以最後加上出發點的代價
也就是所有代價中最小的乙個
**如下
#include #include #include #include using namespace std;
int n, p;
int cost[100005];
int father[100005];
int low = 0x3f3f3f3f;
int mst();
void init();
int get_father(int x);
int ans;
struct edge
}edge[1000005];
inline void ins(int k)
void init()
return;
}inline int get_father(int x)
return x;
}void init_file()
void read_data()
for(int i = 1; i <= p; i++)
ins(i);
sort(edge + 1, edge + 1 + p);
}int mst()
++time;
}return ans;
}void work()
int main()
安慰奶牛 最小生成樹
題目 渣渣oj 題幹 問題描述 farmer john變得非常懶,他不想再繼續維護供奶牛之間供通行的道路。道路被用來連線n個牧場,牧場被連續地編號為1到n。每乙個牧場都是乙個奶牛的家。fj計畫除去p條道路中盡可能多的道路,但是還要保持牧場之間 的連通性。你首先要決定那些道路是需要保留的n 1條道路。...
安慰奶牛 最小生成樹MST
時間限制 1.0s 記憶體限制 256.0mb 問題描述 farmer john變得非常懶,他不想再繼續維護供奶牛之間供通行的道路。道路被用來連線n個牧場,牧場被連續地編號為1到n。每乙個牧場都是乙個奶牛的家。fj計畫除去p條道路中盡可能多的道路,但是還要保持牧場之間 的連通性。你首先要決定那些道路...
藍橋杯 安慰奶牛 最小生成樹
問題描述 farmer john變得非常懶,他不想再繼續維護供奶牛之間供通行的道路。道路被用來連線n個牧場,牧場被連續地編號為1到n。每乙個牧場都是乙個奶牛的家。fj計畫除去p條道路中盡可能多的道路,但是還要保持牧場之間 的連通性。你首先要決定那些道路是需要保留的n 1條道路。第j條雙向道路連線了牧...