這樣陰沉的天氣持續下去,我們不免擔心起他的健康。
51nod魔法學校近日開展了主題為「天氣晴朗」的魔法交流活動。
n名魔法師按陣法站好,之後選取n - 1條魔法鏈將所有魔法師的魔力連線起來,形成乙個魔法陣。
魔法鏈是做法成功與否的關鍵。每一條魔法鏈都有乙個魔力值v,魔法最終的效果取決於陣中所有魔法鏈的魔力值的和。
由於逆天改命的魔法過於暴力,所以我們要求陣中的魔法鏈的魔力值最大值盡可能的小,與此同時,魔力值之和要盡可能的大。
現在給定魔法師人數n,魔法鏈數目m。求此魔法陣的最大效果。
input
兩個正整數n,m。(1 <= n <= 10^5, n <= m <= 2 * 10^5)output接下來m行,每一行有三個整數a, b, v。(1 <= a, b <= n, int_min <= v <= int_max)
保證輸入資料合法。
輸出乙個正整數r,表示符合條件的魔法陣的魔力值之和。input示例
4 6output示例1 2 3
1 3 1
1 4 7
2 3 4
2 4 5
3 4 6
12
這個題目其實讀懂了就覺得還算比較簡單;
題目的意思就是要求生成樹中所有邊的權值中,最大值最小,也就是說最大邊權盡量小,組成乙個生成樹;
第二步就是求這個生成樹的最大權值和,也就是最大生成樹;
那先來說第一步,其實就是按照kruskal演算法,將邊權按照從小到大排序,然後從小到大列舉,看到哪個權值能夠組成一棵樹,其實也就是覆蓋了所有的點;然後記錄這個權值w_max,再次呼叫kruskal,這次從大到小排序,然後所有大於w_max的都過濾,只使用比這個小的邊,然後組成的最大生成樹,就是結果;
直接上**了;
#include#include#include#include#include#includeusing namespace std;
#define ll long long
typedef struct node
node;
node nodes[200005];
bool cmp(const node &s, const node &t)
int father[100005];
int rank[100005];
int hash[100005];
int search_x(int x)
bool union_xy(int x, int y)
else
//rank[root2] += rank[root1];
}return true;
}int main()
sort(nodes, nodes+m, cmp);
setst;
int pos = 0;
int sum = 0;
memset (hash, 0, sizeof(hash));
for (int i = 0; i < m; ++ i)
if (! hash[nodes[i].a])
if (! hash[nodes[i].b])
// if (st.size() == n)
// // st.insert(nodes[i].a);
// st.insert(nodes[i].b);
//if (st.find(nodes[i].a))
}//注意我這裡是找到最大權值的上邊界,這樣我就可以直接從pos-1的位置求最大生成樹了
//不這樣也行,那麼在呼叫kruskal演算法時,大於這個最大權值的過濾掉也是一樣的
while (pos < m)
else
break;
}for (int i = 1; i <= n; ++ i)
ll weight = 0;
int num = 0;
for (int i = pos - 1; i >= 0; -- i)
if (num == n - 1)
{//cout << weight <
1640 天氣晴朗的魔法
51nod魔法學校近日開展了主題為 天氣晴朗 的魔法交流活動。n名魔法師按陣法站好,之後選取n 1條魔法鏈將所有魔法師的魔力連線起來,形成乙個魔法陣。魔法鏈是做法成功與否的關鍵。每一條魔法鏈都有乙個魔力值v,魔法最終的效果取決於陣中所有魔法鏈的魔力值的和。由於逆天改命的魔法過於暴力,所以我們要求陣中...
1640 天氣晴朗的魔法
1640 天氣晴朗的魔法 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 這樣陰沉的天氣持續下去,我們不免擔心起他的健康。51nod魔法學校近日開展了主題為 天氣晴朗 的魔法交流活動。n名魔法師按陣法站好,之後選取n 1條魔法鏈將所有魔法師的魔力連線起來,形成乙個...
51Nod 1640 天氣晴朗的魔法
1640 天氣晴朗的魔法 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 這樣陰沉的天氣持續下去,我們不免擔心起他的健康。51nod魔法學校近日開展了主題為 天氣晴朗 的魔法交流活動。n名魔法師按陣法站好,之後選取n 1條魔法鏈將所有魔法師的魔力連線起來,形成乙個...