HDU 3405 World Islands(最小生成树)
来源:互联网 发布:rpg网游 知乎 编辑:程序博客网 时间:2024/05/17 02:10
水题。
少一个点的最小生成树,数据很小,n < 50,扫描n个点进行n次prim就好了。
代码:
// Header.#include <algorithm>#include <iostream>#include <sstream>#include <cstring>#include <cstdio>#include <vector>#include <string>#include <bitset>#include <queue>#include <stack>#include <cmath>#include <ctime>#include <set>#include <map>using namespace std;// Macrotypedef long long LL;#define TIME cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << "s." << endl;#define IN freopen("/Users/apple/input.txt", "r", stdin);#define OUT freopen("/Users/apple/out.txt", "w", stdout);#define mem(a, n) memset(a, n, sizeof(a))#define rep(i, n) for(int i = 0; i < (n); i ++)#define REP(i, t, n) for(int i = (t); i < (n); i ++)#define FOR(i, t, n) for(int i = (t); i <= (n); i ++)#define ALL(v) v.begin(), v.end()#define Min(a, b) a = min(a, b)#define Max(a, b) a = max(a, b)#define put(a) printf("%d\n", a)#define ss(a) scanf("%s", a)#define si(a) scanf("%d", &a)#define sii(a, b) scanf("%d%d", &a, &b)#define siii(a, b, c) scanf("%d%d%d", &a, &b, &c)#define VI vector<int>#define pb push_backconst int inf = 0x3f3f3f3f, N = 5e1 + 5, MOD = 1e9 + 7;// Macro endint T, cas = 0;int n, m;int vis[N], flag[N];double dis[N], g[N][N], ans;struct point{int x, y;}p[N];struct Edge{int u, v;double dis;bool operator < (const Edge& rhs) const {return dis < rhs.dis;}}e[N * N];// Impdouble Dis(int i, int j) {return sqrt((double)(p[i].x - p[j].x) * (p[i].x - p[j].x) + (double)(p[i].y - p[j].y) * (p[i].y - p[j].y));}void Prim() {mem(vis, 0);int u = flag[0];rep(i, n) if(!flag[i]) dis[i] = g[u][i];double sum = 0.0;vis[u] = 1;double minc;int p;REP(i, 1, n - 1) {minc = inf;rep(j, n) {if(!vis[j] && !flag[j] && dis[j] < minc) {minc = dis[j];p = j;}}sum += minc;vis[p] = 1;rep(j, n) if(!flag[j]) Min(dis[j], g[p][j]);}Min(ans, sum);}int main(){#ifdef LOCAL IN;// OUT;#endif si(T); while(T --) { si(n); rep(i, n) sii(p[i].x, p[i].y); rep(i, n) rep(j, n) g[i][j] = g[j][i] = Dis(i, j); mem(flag, 0); ans = inf; flag[0] = 1; Prim(); REP(i, 1, n) { flag[i-1] = 0, flag[i] = 1; Prim(); } printf("%.2lf\n", ans); } return 0;}
0 0
- hdu 3405 World Islands(最小生成树)
- HDU 3405 World Islands(最小生成树)
- hdu 3405 world islands
- hdu 3405 World Islands
- World Islands HDU3405 杭州省赛 最小生成树
- POJ 3771 World Islands 最小生成树+删点
- HDU 3405 World Islands(最短路)
- HDU 3405 World Islands (prim算法)
- hdu 2122 Ice_cream’s world III(最小生成树)
- hdu 2122 Ice_cream’s world III(最小生成树)
- Ice_cream’s world III hdu 2122 最小生成树
- HDU 2122 Ice_cream’s world III 【最小生成树】
- hdu 2122 Ice_cream’s world III 最小生成树prim
- hdu 2122 Ice_cream’s world III(最小生成树))
- hdu 2122(Ice_cream’s world III)(最小生成树,两种算法都可以)
- HDU 2122 Ice_cream’s world III(最小生成树Kruskal)
- 文章标题 HDU 2122: Ice_cream’s world III (最小生成树+kruskal)
- 最小生成树 Prim 算法HDU 2122 Ice_cream’s world III
- 轩辕剑外传天之痕游戏评析
- CocoaPods pod install/pod update更新慢的问题
- ImageView 的scaleType属性。
- Butter Knife理解和用法
- How to join on two columns using hibernate JPA annotations
- HDU 3405 World Islands(最小生成树)
- 一些程序函数 C++语言,找数组中弟第K大的数和自己写的子符串截取函数
- Android 组件安全
- java之 ------ JUnit、注解、类加载器
- 制作自己的MFC MDI OPENCV程序框架
- rounding to an arbitrary number of significant digits
- SQL动态语句查询
- Maximum Product Subarray —— Leetcode
- 2014 iOS开发者收入调查报告(二):企业开发者篇