hdu3311】的更多相关文章

#include <bits/stdc++.h> using namespace std; #define maxn 10000 #define INF 6e8 ]; ][],v[]; struct re{ int a,b,c; }a[maxn]; ],dis[][]; void arr(int x,int y,int z) { a[++l].a=head[x]; a[l].b=y; a[l].c=z; head[x]=l; } void spfa() { queue<int> q…
传送门 题意: 给出\(n\)个重要点,还有其余\(m\)个点,\(p\)条边. 现在要在这\(n+m\)个点中挖几口水井,每个地方的费用为\(w_i\).连接边也有费用. 问使得这\(n\)个地点都有水井(或直接.间接与水井相连)的最小代价. 思路: 有点巧妙..建立一个虚点连向所有点,边权为\(w_i\).然后直接求以\(0\)为根的斯坦纳树即可,最后再子集\(dp\)一下就行. 原理就是,此时这\(n\)个点连通,并且以\(0\)为根,脑补一下即可发现:要么直接与\(0\)相连,要么间接相…