第13届东北四省赛补题
题意就是给一颗树G,然后图L(G)定义为,把树的每条边作为节点,相邻的两条边(在图G中共享一个节点的边)之间有一条路径,路径的权值为这两条边的权值和。求图L(G)的最小生成树。
#include <cstdio> #include <algorithm> #include <vector> using namespace std; typedef long long ll; const int N = 100010; vector<int> f[N]; int main() { int t; scanf("%d", &t); while (t--) { ll ans = 0; int n, x, y, z; scanf("%d", &n); for (int i = 1; i <= n; i++) f[i].clear(); for (int i = 1; i < n; i++) { scanf("%d%d%d", &x, &y, &z); f[x].push_back(z); f[y].push_back(z); } for (int i = 1; i <= n; i++) { if (f[i].size() > 1) { sort(f[i].begin(), f[i].end()); for (int j = 1; j < f[i].size(); j++) ans += f[i][0] + f[i][j]; } } printf("%lld\n", ans); } return 0; }
浙公网安备 33010602011771号