洛谷 P2738 [USACO4.1]篱笆回路Fence Loops
题目描述
农夫布朗的牧场上的篱笆已经失去控制了。它们分成了1~200英尺长的线段。只有在线段的端点处才能连接两个线段,有时给定的一个端点上会有两个以上的篱笆。结果篱笆形成了一张网分割了布朗的牧场。布朗想将牧场恢复原样,出于这个考虑,他首先得知道牧场上哪一块区域的周长最小。 布朗将他的每段篱笆从1到N进行了标号(N=线段的总数)。他知道每段篱笆有如下属性:
该段篱笆的长度
该段篱笆的一端所连接的另一段篱笆的标号
该段篱笆的另一端所连接的另一段篱笆的标号
幸运的是,没有篱笆连接它自身。对于一组有关篱笆如何分割牧场的数据,写一个程序来计算出所有分割出的区域中最小的周长。
例如,标号1~10的篱笆由下图的形式组成(下面的数字是篱笆的标号):
1
+---------------+
|\ /|
2| \7 / |
| \ / |
+---+ / |6
| 8 \ /10 |
3| \9 / |
| \ / |
+-------+-------+
4 5
上图中周长最小的区域是由2,7,8号篱笆形成的。
输入输出格式
输入格式:
第1行: N (1 <= N <= 100)
第2行到第3*N+1行: 每三行为一组,共N组信息:
每组信息的第1行有4个整数: s, 这段篱笆的标号(1 <= s <= N); Ls, 这段篱笆的长度 (1 <= Ls <= 255); N1s (1 <= N1s <= 8) 与本段篱笆的一端 所相邻的篱笆的数量; N2s与本段篱笆的另一端所相邻的篱笆的数量。 (1 <= N2s <= 8).
每组信息的的第2行有 N1s个整数, 分别描述与本段篱笆的一端所相邻的篱笆的标号。
每组信息的的第3行有N2s个整数, 分别描述与本段篱笆的另一端所相邻的篱笆的标号。
输出格式:
输出的内容为单独的一行,用一个整数来表示最小的周长。
输入输出样例
10
1 16 2 2
2 7
10 6
2 3 2 2
1 7
8 3
3 3 2 1
8 2
4
4 8 1 3
3
9 10 5
5 8 3 1
9 10 4
6
6 6 1 2
5
1 10
7 5 2 2
1 2
8 9
8 4 2 2
2 3
7 9
9 5 2 3
7 8
4 5 10
10 10 2 3
1 6
4 9 5
12
说明
题目翻译来自NOCOW。
USACO Training Section 4.1
思路:floyed找最小环
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXN 110
using namespace std;
int n,num,tot,minn=0x3f3f3f3f;
struct nond{
int id,len,lsum,rsum;
int a[][];
int b[][];
}edge[];
int dy[];
int map[][],dis[][];
int cmp(nond x,nond y){
return x.id<y.id;
}
int main(){
memset(dy,-,sizeof(dy));
memset(map,0x3f,sizeof(map));
memset(dis,0x3f,sizeof(dis));
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d%d%d%d",&edge[i].id,&edge[i].len,&edge[i].lsum,&edge[i].rsum);
for(int j=;j<=edge[i].lsum;j++){
int z;
scanf("%d",&z);
edge[i].a[][j]=z;
edge[i].b[][z]=;
}
for(int j=;j<=edge[i].rsum;j++){
int z;
scanf("%d",&z);
edge[i].a[][j]=z;
edge[i].b[][z]=;
}
}
sort(edge+,edge++n,cmp);
for(int i=;i<=n;i++){
for(int j=;j<=edge[i].lsum;j++){
int v=edge[i].a[][j];
if(edge[v].b[][i]&&dy[v*-]!=-)
dy[i*-]=dy[v*-];
else if(edge[v].b[][i]&&dy[v*]!=-)
dy[i*-]=dy[v*];
if(dy[i*-]!=-) break;
}
if(dy[i*-]==-)
dy[i*-]=++tot;
for(int j=;j<=edge[i].rsum;++j){
int v=edge[i].a[][j];
if(edge[v].b[][i]&&dy[v*-]!=-)
dy[i*]=dy[v*-];
else if(edge[v].b[][i]&&dy[v*]!=-)
dy[i*]=dy[v*];
if(dy[i*]!=-) break;
}
if(dy[i*]==-)
dy[i*]=++tot;
map[dy[i*-]][dy[i*]]=map[dy[i*]][dy[i*-]]=edge[i].len;
dis[dy[i*-]][dy[i*]]=dis[dy[i*]][dy[i*-]]=edge[i].len;
}
for(int k=;k<=tot;k++){
for(int i=;i<k;i++)
for(int j=i+;j<k;j++)
minn=min(dis[i][j]+map[j][k]+map[k][i],minn);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(i!=j&&j!=k&&i!=k)
if(dis[i][j]>dis[i][k]+dis[k][j])
dis[i][j]=dis[i][k]+dis[k][j];
}
cout<<minn;
}
洛谷 P2738 [USACO4.1]篱笆回路Fence Loops的更多相关文章
- 洛谷P2738 [USACO4.1]篱笆回路Fence Loops
P2738 [USACO4.1]篱笆回路Fence Loops 11通过 21提交 题目提供者该用户不存在 标签USACO 难度提高+/省选- 提交 讨论 题解 最新讨论 暂时没有讨论 题目描述 ...
- [USACO4.1]篱笆回路Fence Loops
题目:USACO Training 4.1(在官网上提交需加文件输入输出).洛谷P2738. 题目大意:给你一张图里的边集,让你求出这张图的最小环. 解题思路:求最小环很简单,用Floyd即可.最重要 ...
- 题解 P2738 【[USACO4.1]篱笆回路Fence Loops】
这题是我期中测试的一题水题,然而英文题目太长了不想读...后面考完被同学提醒后20分钟切了(心塞) 切完看了波题解,发现貌似我的方法跟大家都不一样呢... 常规做法: \(Floyd\) 这个有三页的 ...
- 洛谷P2751 [USACO4.2]工序安排Job Processing
P2751 [USACO4.2]工序安排Job Processing 18通过 78提交 题目提供者该用户不存在 标签 难度普及+/提高 提交 讨论 题解 最新讨论 暂时没有讨论 题目描述 一家工 ...
- 洛谷P2737 [USACO4.1]麦香牛块Beef McNuggets
P2737 [USACO4.1]麦香牛块Beef McNuggets 13通过 21提交 题目提供者该用户不存在 标签USACO 难度普及+/提高 提交 讨论 题解 最新讨论 暂时没有讨论 题目描 ...
- 洛谷 P1344 [USACO4.4]追查坏牛奶Pollutant Control 解题报告
P1344 [USACO4.4]追查坏牛奶Pollutant Control 题目描述 你第一天接手三鹿牛奶公司就发生了一件倒霉的事情:公司不小心发送了一批有三聚氰胺的牛奶.很不幸,你发现这件事的时候 ...
- 洛谷 P2751 [USACO4.2]工序安排Job Processing 解题报告
P2751 [USACO4.2]工序安排Job Processing 题目描述 一家工厂的流水线正在生产一种产品,这需要两种操作:操作A和操作B.每个操作只有一些机器能够完成. 上图显示了按照下述方式 ...
- 洛谷——P1894 [USACO4.2]完美的牛栏The Perfect Stall
P1894 [USACO4.2]完美的牛栏The Perfect Stall 题目描述 农夫约翰上个星期刚刚建好了他的新牛棚,他使用了最新的挤奶技术.不幸的是,由于工程问题,每个牛栏都不一样.第一个星 ...
- 洛谷P2687 [USACO4.3]逢低吸纳Buy Low, Buy Lower
P2687 [USACO4.3]逢低吸纳Buy Low, Buy Lower 题目描述 “逢低吸纳”是炒股的一条成功秘诀.如果你想成为一个成功的投资者,就要遵守这条秘诀: "逢低吸纳,越低越 ...
随机推荐
- 浅谈 Qt 布局那些事
Qt 布局那些事是本文介绍的内容,直接进入主题.GridLayout是一个非常强大的布局管理器,它可以实现很多复杂的布局,名字中暗示它将所有控件放置在类似网格的布局中.^__^GridLayout有两 ...
- 小学生都能学会的python(小数据池)
小学生都能学会的python(小数据池) 1. 小数据池. 目的:缓存我们字符串,整数,布尔值.在使用的时候不需要创建过多的对象 缓存:int, str, bool. int: 缓存范围 -5~256 ...
- java中的hachcode方法
哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: public native int hashCode(); 根据这个 ...
- codevs——T1814 最长链
http://codevs.cn/problem/1814/ 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 De ...
- 【网络协议】TCP协议简单介绍
本文仅仅是对TCP协议做个简要的介绍. TCP协议,即传输控制协议.与UDP协议同处于传输层,相同使用相同的网络层,但TCP提供了一种可靠的.面向连接的传输数据服务,它会在两个使用TC ...
- android自己定义Application全局变量不能类型转换的问题
今天弄了个全局变量AppContext ,但一直出现例如以下错误,原来继承 Application的得在清单文件声明. java.lang.RuntimeException: Unable to st ...
- Systemd启动图形界面过程
1 启动命令 systemctl isolate graphical.target 2 启动过程: 文件:/etc/systemd/system/graphical.target 来自:systemd ...
- Android学习路线(十三)Activity生命周期——暂停和恢复(Pausing and Resuming )一个Activity
在正常使用应用的过程中.前台的activity在一些时候会被其它的组件遮挡,导致这个activity暂停.举个样例.当一个半透明的activity被打开(比如一个dialog样式的activity), ...
- POJ 题目3237 Tree(Link Cut Tree边权变相反数,求两点最大值)
Tree Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 6131 Accepted: 1682 Description ...
- [JZOJ 5909] [NOIP2018模拟10.16] 跑商(paoshang) 解题报告 (圆方树)
题目链接: https://jzoj.net/senior/#contest/show/2529/2 题目: 题目背景:尊者神高达很穷,所以他需要跑商来赚钱题目描述:基三的地图可以看做 n 个城市,m ...