USCAO section 4.1 Fence Loops(最短路,最小环,5级)

【USACO题库】4.1.3 Fence Loops篱笆回路 题目描述 农夫布朗的牧场上的篱笆已经失去控制了。它们分成了1~200英尺长的线段。只有在线段的端点处才能连接两个线段,有时给定的一个端点上会有两个以上的篱笆。结果篱笆形成了一张网分割了布朗的牧场。布朗想将牧场恢复原样,出于这个考虑,他首先得知道牧场上哪一块区域的周长小。 1 +---------------+ |\ /| 2| \7 / | | \ / | +---+ / |6 阅读详情

Fence Loops

The fences that surround Farmer Brown's collection of pastures have gotten out of control. They are made up of straight segments from 1 through 200 feet long that join together only at their endpoints though sometimes more than two fences join together at a given endpoint. The result is a web of fences enclosing his pastures. Farmer Brown wants to start to straighten things out. In particular, he wants to know which of the pastures has the smallest perimeter.

Farmer Brown has numbered his fence segments from 1 to N (N = the total number of segments). He knows the following about each fence segment:

  • the length of the segment
  • the segments which connect to it at one end
  • the segments which connect to it at the other end.
Happily, no fence connects to itself.

Given a list of fence segments that represents a set of surrounded pastures, write a program to compute the smallest perimeter of any pasture. As an example, consider a pasture arrangement, with fences numbered 1 to 10 that looks like this one (the numbers are fence ID numbers):

           1
   +---------------+
   |\             /|
  2| \7          / |
   |  \         /  |
   +---+       /   |6
   | 8  \     /10  |
  3|     \9  /     |
   |      \ /      |
   +-------+-------+
       4       5

The pasture with the smallest perimeter is the one that is enclosed by fence segments 2, 7, and 8.

PROGRAM NAME: fence6

INPUT FORMAT

Line 1:N (1 <= N <= 100)
Line 2..3*N+1:

N sets of three line records:

  • The first line of each record contains four integers: s, the segment number (1 <= s <= N); Ls, the length of the segment (1 <= Ls <= 255); N1s (1 <= N1s <= 8) the number of items on the subsequent line; and N2sthe number of items on the line after that (1 <= N2s <= 8).
  • The second line of the record contains N1 integers, each representing a connected line segment on one end of the fence.
  • The third line of the record contains N2 integers, each representing a connected line segment on the other end of the fence.

SAMPLE INPUT (file fence6.in)

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

OUTPUT FORMAT

The output file should contain a single line with a single integer that represents the shortest surrounded perimeter.

SAMPLE OUTPUT (file fence6.out)

12

思路:点边互化,然后用floy判最小环,注意判环要有不同的点元素在。





Executing...
   Test 1: TEST OK [0.000 secs, 3852 KB]
   Test 2: TEST OK [0.000 secs, 3852 KB]
   Test 3: TEST OK [0.000 secs, 3852 KB]
   Test 4: TEST OK [0.000 secs, 3852 KB]
   Test 5: TEST OK [0.000 secs, 3852 KB]
   Test 6: TEST OK [0.000 secs, 3852 KB]
   Test 7: TEST OK [0.000 secs, 3852 KB]
   Test 8: TEST OK [0.011 secs, 3852 KB]
   Test 9: TEST OK [0.011 secs, 3852 KB]



/*
ID:nealgav1
PROG:fence6
LANG:C++
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
const int mm=200+9;
const int oo=1e9;
vector<int>ll[mm],rr[mm];
int g[mm][mm],n,len[mm],dis[mm][mm];
int main()
{ freopen("fence6.in","r",stdin);
  freopen("fence6.out","w",stdout);
  int a,b,c,d;
  while(~scanf("%d",&n))
  {
    for(int i=0;i<n;++i)
    {
      scanf("%d",&a);
      scanf("%d%d%d",&len[a],&b,&c);
      for(int j=0;j<b;++j)
      {
        scanf("%d",&d);ll[a].push_back(d);
      }
      for(int j=0;j<c;++j)
      {
        scanf("%d",&d);rr[a].push_back(d);
      }
    }
    for(int i=0;i<=n;++i)
      for(int j=0;j<=n;++j)
      g[i][j]=oo;
      int z;
    for(int i=1;i<=n;++i)
    { z=ll[i].size();
      for(int j=0;j<z;++j)
        g[i][ll[i][j]]=len[i]+len[ll[i][j]];
      z=rr[i].size();
      for(int j=0;j<z;++j)
        g[i][rr[i][j]]=len[i]+len[rr[i][j]];
    }
    for(int i=0;i<=n;++i)
      for(int j=0;j<=n;++j)
      dis[i][j]=g[i][j];
    int ans=oo,u,v;
    for(int i=1;i<=n;++i)
    {
      for(int j=0;j<ll[i].size();++j)
      {
        u=ll[i][j];
        if(u<i)
        {
          for(int k=0;k<rr[i].size();++k)
          {
            v=rr[i][k];
            if(v<i)
            {
              ans=min(ans,dis[u][v]+g[u][i]+g[v][i]);
            }
          }
        }
      }
      for(int j=1;j<=n;++j)
        for(int k=1;k<=n;++k)
        dis[j][k]=min(dis[j][k],dis[j][i]+dis[i][k]);
    }
    printf("%d\n",ans/2);
  }
  return 0;
}



SUMO仿真教程(1) ——安装环境的设置(Windows 10系统) SUMO安装环境的设置 目录一.SUMO下载的官方网址二.下载步骤:三.环境设置:1.打开设置环境变量的界面2.用户(Administrator)变量设置3.系统变量设置四.总述 一.SUMO下载的官方网址 sumo的下载地址: 二.下载步骤: 1.以sumo1.8.0为示例进行演示,点击下载地址; 2.选择Windows64位的安装版本,如下图所示: 3.点击对应版本会跳转到如下图所示的界面,等待几秒后会自动下载(温馨提示:请将下载路径提前设置好): 4.到目标存储路径下查看下载完成的SUMO(本 阅读详情

相关推荐

计算机视觉学习路线图:从入门到专家

计算机视觉学习路线图:从入门到专家​ ,人工智能,计算机视觉,大模型,AI,计算机视觉学习路线图从七方面展开。先强调数学基础,含线性代数、概率统计和微积分;接着介绍 Python、OpenCV 等编程语言与工具;涵盖边缘检测、特征提取等经典算法;阐述深度学习中 CNN 结构、经典模型及实现;涉及目标检测、图像分割等高专题;包含图像分类、目标检测和人脸识别等项目实战;后提及科研进阶的论文阅读、项目参与和论文发表,助学习者从入门到专家。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 7万+

USACO: Fence Loops

Fence Loops<br /><br />The fences that surround Farmer Brown's collection of pastures have gotten out of control. They are made up of straight segments from 1 through 200 feet long that join together only at their endpoints though sometimes more than two f

356

G.6 PaddleHub实战篇{ERNIE实现文新闻本分类、ERNIE3.0 实现序列标注}【四】

百度飞桨:ERNIE 3.0 、通用信息抽取 UIE、paddleNLP的安装使用[一]_汀、的博客-CSDN博客PaddleHub--飞桨预训练模型应用工具{风格迁移模型、词法分析情感分析、Fine-tune API微调}【一】_汀、的博客-CSDN博客 PaddleHub--{超参优化AutoDL Finetuner}【二】_汀、的博客-CSDN博客PaddleHub实战篇{词法分析模型LAC、情感分类ERNIE Tiny}训练、部署【三】_汀、的博客-CSDN博客通过前面几篇文章大家都有一定了解,下面

丨汀、的博客 6161

Fence Loops[USACO]

上班真无趣,还是上学好。偷偷码个题。 这个题真是让我抓狂,本来觉得很容易的(把边图转化为点图,dfs就好了)。结果在转化的时候才发现,这INPUT不是一般的恶心,后来在纸上画画,觉得不用转化应该也OK。 搞个边的结构,把所有东西都读进去。 struct SEdge { int nLen; int arrSize[2]; int arrCon[2][8];}; 核心还是df...

weixin_30471561的博客 182

常用的fence设备-SBD简介

常用的fence设备-SBD简介

qq_41303761的博客 2014

C++——【USACO 4.1.2】——Fence Loops

Fence Loops The fences that surround Farmer Brown's collection of pastures have gotten out of control. They are made up of straight segments from 1 through 200 feet long that join together only a

McDonnell_Douglas的博客 390

USACO 4.1 Fence loop

题目大意是找出图中权值和小的一个环,DFS加剪枝就行了,唯一有点恶心的是题目的输入给的是每条边的信息,不太好转化成图论中节点和边的集合,索性就不转化成图的常用表示形式了,这样倒是更方便一点。 这道题的主要思路就是暴力搜索,用变量min来记录最小环的周长,min初始化为图中所有边长的和,枚举以每一条边为起点沿着某一固定方向走,如果找到了一个比min 还小的环,则更新,如果在搜索过程中发现路径的长...

huobengluantiao8 114

USACO 4.1 Fence Loops(Floyd求最小环

Fence Loops The fences that surround Farmer Brown's collection of pastures have gotten out of control. They are made up of straight segments from 1 through 200 feet long that join together only ...

weixin_30341735的博客 172

usaco 4.1 Fence Loops(floyd求最小环)

Fence Loops The fences that surround Farmer Brown's collection of pastures have gotten out of control. They are made up of straight segments from 1 through 200 feet long that join together only a

志当存高远 1006

篱笆回路Fence Loops

题目 https://www.luogu.org/problemnew/show/P2738 思路 这一道题有3个难点: (1)每一条边都有编号,感觉有些麻烦: 认真看题可以发现“边的标号s(1&lt;=s&lt;=N)”,也就是说只是把边 的顺序打乱而已,我们就不用管这么多,直接放上去边的编号,然后搜索的时候1-n (2)这一道题的主要难点————找小的环的大小: 这个dfs或者bfs都可以,...

Brute♂force 403

usaco Fence Loops

一开始完全没思路,百度了一下了解到是用floyd求最小环,于是我去百度了一下这个算法了解到了很多我之前不了解的flyod算法。好了既然知道用啥算法就写吧,然后发现懵逼了。这题是边的序号没有点。得自己化成点图。。。。。。。。于是我苦思冥想。终于想到了一个方法本来想着如果不对的话就一步一步的改谁知道竟然第一遍就all test OK 了哈哈。 floyd求最小环我转到了上篇博客了。接下来说说我是怎么

silence401的博客 348

USACO-Section 4.1 Fence Loops (无向图最小环[Dijkstra||Floyd])

解法一:O(n^3*logn) 明白题意后想了一个解法:以每一个顶点做起点,每次去掉与其相连的一条边,然后求该点到这条边另一点的短路,再加上这条边的权值就可得这个环的权值,每次取小即可,复杂度为:O(n^4) 看了题解后发现,本题是求无向图的最小环,解法为:枚举每一条边,去掉该边,然后求该边两点的短路,再加上这条边的权值就可得到这个环的权值,复杂度为:O(n^3) 写代码的时候才发现本题的难点不是求最小环,而是如何将边的信息转化为点的信息,我用了map以判断某一边的点的下标 解法二:Floyd -

idealism_xxm的专栏 2276

USACO 4.1 Fence Loops (fence6)

/* 这题是求无向图中的一个最小环的长度。 主要思路是:因为边都是直线,边的两点之间的短距离必然是这个边长。那么, 再求一条到两顶点的短距径,这个路径与边构成了一个环。这个环是包含该边的最小环。 枚举一下所有边,计算出最小环即可。对于每个边,删除该边,然后计算两顶点的短路径,再恢复该边。 但是这个图的输入是用边表示的,一个难点就是将其转换成用点表示。这里用边的集合来表示一个点

Hello World! 1808

USACO 4.1.3 篱笆回路 (floyd找最小环

【USACO4.1.3】Fence Loops篱笆回路问题描述 农夫布朗的牧场上的篱笆已经失去控制了。它们分成了1~200英尺长的线段。只有在线段的端点处才能连接两个线段,有时给定的一个端点上会有两个以上的篱笆。结果篱笆形成了一张网分割了布朗的牧场。布朗想将牧场恢复原样,出于这个考虑,他首先得知道牧场上哪一块区域的周长小。布朗将他的每段篱笆从1到N进行了标号(N=线段的总数)。他知道每段篱笆有

Mogician_Evian的博客 626

[USACO4.1]篱笆回路Fence Loops

题目:USACO Training 4.1(在官网上提交需加文件输入输出)、洛谷P2738。 题目大意:给你一张图里的边集,让你求出这张图的最小环。 解题思路:求最小环很简单,用Floyd即可。重要的是,该题给你的是边集而不是点集,所以构图是关键。 我是这么构图的:设当前边的编号为$x$,我们先把它左端点编号设为$2x-1$,右端点编号设为$2x$,然后用$dy[p]$表示编号为...

180

洛谷P2738 [USACO4.1]篱笆回路Fence Loops

P2738 [USACO4.1]篱笆回路Fence Loops 11通过 21提交 题目提供者该用户不存在 标签USACO 难度提高+/省选- 提交讨论题解 新讨论 暂时没有讨论 题目描述 农夫布朗的牧场上的篱笆已经失去控制了。它们分成了1~200英尺长的线段。只有在线段的端点处才能连接两个线段,有时给定的一个端点上会有两个以上的...

weixin_30745641的博客 181

Fence Loops

题意:给定图,求短环路 解题思路: 将题目中给出的输入转换为邻接矩阵对一条边,在图中将其去掉,修改邻接矩阵。然后用SPFA求这条边两个顶点的短路径,加上这条边的长度就是包含这条边的短环路对每条边进行2中的操作,保存短环路的小值,就是后的答案 代码: /* ID: zc.rene1 LANG: C PROG: fence6 */ #include #include #

原味 544

USACO Fence Loops 解题报告

这道题是看了网上的思路做出来的。之前尝试过(小)生成树的方法,这似乎是获取所有“基本环”的标准方法,时间复杂度也更低,但由于我不知道怎么证明加之懒惰,没有这样实现。 这道题的思路是:逐一去掉一条边(把这条边的length设为无穷大),然后求从这条边的左端点到右端点的短路(使用Dijkstra),这样通过该边的小基本环的长度就是这条边的长度与短路径之和。所有的边遍历完后,小基本环中

thestoryofsnow的专栏 794

篱笆与葡萄园

摘自伊索寓言

天行健 ● 君子以自强不息 938

[洛谷P2738] [USACO4.1]篱笆回路Fence Loops

洛谷题目链接:[USACO4.1]篱笆回路Fence Loops 题目描述 农夫布朗的牧场上的篱笆已经失去控制了。它们分成了1~200英尺长的线段。只有在线段的端点处才能连接两个线段,有时给定的一个端点上会有两个以上的篱笆。结果篱笆形成了一张网分割了布朗的牧场。布朗想将牧场恢复原样,出于这个考虑,他首先得知道牧场上哪一块区域的周长小。 布朗将他的每段篱笆从1到N进行了标号(N=线段的总...

dengtun2502的博客 209
上一篇: windows 建立窗口的程序代码
下一篇: #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE
剑不飞
博客等级 码龄15年 85粉丝 505原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值