传送门:
http://codeforces.com/problemset/problem/618/D
题意:
一个图,任意两个节点之间都有边,现给出一个最小生成树,树上的权值和其余边的权值不一样,现让你构造出一条通过所有节点恰好一次的路径,问最小权值是多少?
思维题:
首先经过每个点恰好一次,那么走的总边数是一定的,即n-1,那么既然边的权值只有两种,那么肯定是算出一种,然后用减法求得另外一种喽!
分为两种情况,如果最小生成树上的边小的话,那么肯定就是要贪心地在树上选最小的边!
一个点可以有入度和出度,那么每个节点就是最多连两条边,所以就在最小生成树上构造这样一条路径就ok了!
另一种情况,如果最小生成树是星形的话,(也就是某个节点的度数为n-1),那么无疑肯定要选择一条最小生成树上的边,其余的话都绝对可以用非树上的边去遍历!!直觉也可以证明!!
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=2e5+10;
vector<int>edge[maxn];int degree[maxn];
int n,u,v;ll x,y;ll num;
int dfs(int u,int v){
int</