VJ 1069 新年趣事之红包

描述

xiaomengxian一进门,发现外公、外婆、叔叔、阿姨……都坐在客厅里等着 他呢。经过仔细观察,xiaomengxian发现他们所有人正好组成了一个凸多边形。最重要的是,他们每个人手里都拿着一个红包(^o^)。于是非常心 急,xiaomengxian决定找一条最短的路线,拿到所有的红包。

假设屋里共有N个人拿着红包,把他们分别从1到N编号。其中,编号为1的人就坐在大门口,xiaomengxian必须从这里出发去拿其它的红包。一条合法的路线必须经过所有的点一次且仅一次。

格式

输入格式

第一行为一个整数N(1<=N<=800)。

以下N行,每行两个实数Xi,Yi,表示该点的坐标。

各个点按照逆时针顺序依次给出。

输出格式

一个实数,表示最短的路线长度(保留三位小数)。

样例1

样例输入1[复制]

4
50.0 1.0
5.0 1.0
0.0 0.0
45.0 0.0

样例输出1[复制]

50.211

限制

各个测试点1s

题解:基本上都说是DP,但是因为我DP太弱。。根本不敢打,而且打了也不对。。于是就去写了克鲁斯卡尔求最小生成树,感觉并没有什么问题,欢迎各位大牛与我探讨

CODE:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#define REP(i, s, n) for(int i = s; i <= n; i ++)
#define REP_(i, s, n) for(int i = n; i >= s; i --)
#define MAX_N 800 + 10

using namespace std;

int n, f[MAX_N];
double x[MAX_N], y[MAX_N];
struct node{
    int u, v;
    double w;
}E[700000];

bool cmp(node a, node b){ return a.w < b.w; }

int find(int x){
    if(f[x] == x) return x;
    return f[x] = find(f[x]);
}

int main(){
    scanf("%d", &n);
    int sum = 0;
    REP(i, 1, n) scanf("%lf%lf", &x[i], &y[i]);
    REP(i, 1, n) f[i] = i;
    REP(i, 1, n - 1) REP(j, i + 1, n){
        E[++ sum].u = i; E[sum].v = j;
        E[sum].w = sqrt((x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j]));
    }

    double ans = 0;
    sort(E + 1, E + sum + 1, cmp);
    REP(i, 1, sum){
        int rx = find(E[i].u), ry = find(E[i].v);
        if(rx == ry) continue;
        f[ry] = rx;
        ans += E[i].w;
    }
    printf("%.3lf", ans);
    return 0;
}
时间: 2024-10-31 01:37:36

VJ 1069 新年趣事之红包的相关文章

vijos p1071新年趣事之打牌

描述 过年的时候,大人们最喜欢的活动,就是打牌了.xiaomengxian不会打牌,只好坐在一边看着. 这天,正当一群人打牌打得起劲的时候,突然有人喊道:“这副牌少了几张!”众人一数,果然是少了.于是这副牌的主人得意地说:“这是一幅特制的牌,我知道整副牌每一张的重量.只要我们称一下剩下的牌的总重量,就能知道少了哪些牌了.”大家都觉得这个办法不错,于是称出剩下的牌的总重量,开始计算少了哪些牌.由于数据量比较大,过了不久,大家都算得头晕了. 这时,xiaomengxian大声说:“你们看我的吧!”于

vijosP1071 新年趣事之打牌

链接:https://vijos.org/p/1071 [思路] 01背包+路径输出. 用d[][]记录[][]可转移的数目,>=2则输出-1,0输出0,否则输出路径.对于路径可以写一个递归过程print完成. 本题的数据着实有些坑,需要注意的有数组的范围,使用LL.题目中为什么没有交待? [代码] 1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 5 const int maxn = 300+

新年趣事之打牌(01背包+唯一路径)

过年的时候,大人们最喜欢的活动,就是打牌了.蒜头君不会打牌,只好坐在一边看着. 这天,正当一群人打牌打得起劲的时候,突然有人喊道: "这副牌少 了几张!”众人一数,果然是少了.于是这副牌的主人得意地说: "这是一幅特制的牌,我知道整副牌每一张的重量. 只要我们称一下剩下的牌的总重量,就能知道少了哪些牌了.”大家都觉得这个办法不错,于是称出剩下的牌的总重量,开始计算少了哪些牌.于数据量比较大,过了不久,大家都算得头晕了. 这时,蒜头君大声说:“你们看我的吧! ”于是他拿出笔记本电脑,编出

[SinGuLaRiTy] 动态规划题目复习

[SinGuLaRiTy-1026] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. [UVA 1025] A Spy in the Metro 题目描述 特工玛利亚被送到S市执行一个特别危险的任务.她需要利用地铁完成他的任务,S市的地铁只有一条线路运行,所以并不复杂. 玛利亚有一个任务,现在的时间为0,她要从第一个站出发,并在最后一站的间谍碰头.玛利亚知道有一个强大的组织正在追踪她,她知道如果一直呆在一个车站,她会有很大的被抓的风险,躲

OI每周刷题记录

2017.8.7 [线段树] codevs 1080 1081 1082 线段树练习 线段树练习2 线段树练习3 vijos1066 弱弱的战壕 hdu1166 敌兵布阵 [模拟] vijos1066 弱弱的战壕 [动态规划] vijos1071 新年趣事之打牌 福建师范大学附属中学oj1290 寻找牧场 poj3046 Ant Counting poj2718 Smallest Difference [离散化] poj 1177 Picture [高精度]HazeOJ#17 A+B++

SCOI2009游戏

1025: [SCOI2009]游戏 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1065  Solved: 673[Submit][Status] Description windy学会了一种游戏.对于1到N这N个数字,都有唯一且不同的1到N的数字与之对应.最开始windy把数字按顺序1,2,3,……,N写一排在纸上.然后再在这一排下面写上它们对应的数字.然后又在新的一排下面写上它们对应的数字.如此反复,直到序列再次变为1,2,3,……,N.

大神刷题表

9月27日 后缀数组:[wikioi3160]最长公共子串 dp:NOIP2001统计单词个数 后缀自动机:[spoj1812]Longest Common Substring II [wikioi3160]最长公共子串 [spoj7258]Lexicographical Substring Search 扫描线+set:[poj2932]Coneology 扫描线+set+树上删边游戏:[FJOI2013]圆形游戏 结论:[bzoj3706][FJ2014集训]反色刷 最小环:[poj1734

小说脑洞:《四十岁的“女”人》

简介:一个28岁的男人在连续熬夜工作几天后,一觉醒来,变成了一个将近40的女人. 风格:日常类. 篇幅:中短篇. 宿主(女人):39岁未婚女人,在上海工作,是公司的高级经理,管理几个产品组.性格上,掌控欲很强,冷冽果决,业务能力强,事业心强.外貌上,匀称,有气质.物质上,有一套两室房子,一辆宝马,200w存款. 寄生(男人):28岁单身男人,事业已经有一定起色,具备领先几年眼界.性格上,少语简单,努力,随性. 剧情: 1.挖掘有天分的人,敢用人.(观点:别人的谴责不要那么急去否定它,先确定是否有

巨头激战“春节红包”背后的商业逻辑

春节临近,支付宝.百度.搜狗等各互联网巨头公司纷纷推出红包活动,以不同传播方式回馈互联网全体用户. 在这股由诸多互联网巨头公司推进的红包大战潮流中,不同厂商所使用方式不尽相同,有的厂商设置了高昂的参与门槛,导致参与用户怨声载道,而有的厂商则直接给用户发放现金红包并给用户更多的个性化施展空间,从而赢得用户一片好评.在这些举措不同但目的近乎一致的红包行为中,不同互联网公司推进的红包发放差异化距离,也隐约透露出其背后不同的商业逻辑和未来走向. 挺近潮流:巨头各使奇招激战"春节红包" 微信2年