青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

USACO 4.1 Fence Loops


???? 這題是求無向圖中的一個最小環的長度。
???? 主要思路是:因為邊都是直線,邊的兩點之間的最短距離必然是這個邊長。那么,再求一條到兩頂點的最短距徑,這個路徑與邊構成了一個環。這個環是包含該邊的最小環。枚舉一下所有邊,計算出最小環即可。對于每個邊,刪除該邊,然后計算兩頂點的最短路徑,再恢復該邊。
???? 但是這個圖的輸入是用邊表示的,一個難點就是將其轉換成用點表示。這里用邊的集合來表示一個點。然后用map<set<int>,int>來存儲某一邊對應的邊的編號。每找到一個新的頂點則分配一個新的編號。這部分主要通過函數get_vertex(set<int>&s)來實現。

代碼如下:
#include?<iostream>
#include?
<fstream>
#include?
<set>
#include?
<map>
#include?
<climits>
#include?
<cstring>

using?namespace?std;

ifstream?fin(
"fence6.in");
ofstream?fout(
"fence6.out");

#ifdef?_DEBUG
#define?out?cout
#define?in?cin
#else
#define?out?fout
#define?in?fin
#endif

struct?Edge{
????
int?va,vb,len;
};

int?edge_num;
int?vertex_num;
int?graph[100][100];
Edge?edges[
100];

int?get_vertex(set<int>&s)
{
????
static?map<set<int>,int>vertex;

????
if(?vertex.find(s)?==?vertex.end()?){
????????vertex[s]?
=?vertex_num;
????????
return?vertex_num++;
????}
else{
????????
return?vertex[s];
????}
}

void?build_graph()
{
????
in>>edge_num;

????
for(int?i=0;i<100;++i)
????????
for(int?j=0;j<100;++j)
????????????graph[i][j]?
=?INT_MAX/2;

????
for(int?i=0;i<edge_num;++i){
????????
int?edge,tmp,len;
????????
int?left_num,right_num;
????????
set<int>?s;
????????
in>>edge>>len>>left_num>>right_num;
????????s.insert(edge);
????????
for(int?j=0;j<left_num;++j){
????????????
in>>tmp;
????????????s.insert(tmp);
????????}
????????
int?left_vertex?=?get_vertex(s);
????????s.clear();
????????s.insert(edge);
????????
for(int?j=0;j<right_num;++j){
????????????
in>>tmp;
????????????s.insert(tmp);
????????}
????????
int?right_vertex?=?get_vertex(s);
????????graph[left_vertex][right_vertex]?
=?
????????????graph[right_vertex][left_vertex]?
=?len;
????????edges[i].va?
=?left_vertex;
????????edges[i].vb?
=?right_vertex;
????????edges[i].len?
=?len;
????}
}

int?shortest_path(int?va,int?vb)
{
????
int?shortest[100];
????
bool?visited[100];

????memset(visited,
0,sizeof(visited));
???
????
for(int?i=0;i<vertex_num;++i){
????????shortest[i]?
=?graph[va][i];
????}

????visited[va]?
=?true;

????
while(true){
????????
int?m?=?-1;
????????
for(int?i=0;i<vertex_num;++i){
??????????????
if(!visited[i]){
????????????????
if(m==-1||shortest[i]<shortest[m])
????????????????????m?
=?i;
??????????????}
????????}
????????
//沒有新加結點了
????????
????????visited[m]?
=?true;

????????
if(?m==vb?)
????????????
return?shortest[vb];

????????
for(int?i=0;i<vertex_num;++i){
????????????
if(!visited[i])
????????????shortest[i]?
=?min(shortest[i],shortest[m]+graph[m][i]);
????????}
????}
}

void?solve()
{
????build_graph();

????
int?best?=?INT_MAX;

????
for(int?i=0;i<edge_num;++i){
??????graph[edges[i].va][edges[i].vb]?
=?graph[edges[i].vb][edges[i].va]?=?INT_MAX/2;?
??????best?
=?min(best,edges[i].len+shortest_path(edges[i].va,edges[i].vb)?);
??????graph[edges[i].va][edges[i].vb]?
=?graph[edges[i].vb][edges[i].va]?=?edges[i].len;?
????}

????
out<<best<<endl;
}

int?main(int?argc,char?*argv[])
{
????solve();?
????
return?0;
}


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




posted on 2009-07-17 14:26 YZY 閱讀(621) 評論(0)  編輯 收藏 引用 所屬分類: AlgorithmUSACO圖論

導航

<2009年7月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

統計

常用鏈接

留言簿(2)

隨筆分類

隨筆檔案

搜索

積分與排名

最新評論

閱讀排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲国产一区二区三区高清| 免费久久精品视频| 亚洲精品1区2区| 亚洲在线视频| 久久疯狂做爰流白浆xx| 国产精品资源在线观看| 亚洲欧美国产日韩天堂区| 欧美一区二区视频免费观看| 国产亚洲精品7777| 久久亚洲风情| 亚洲美女毛片| 亚洲一区www| 国模私拍一区二区三区| 久久成人免费网| 久久精品道一区二区三区| 欧美性大战久久久久久久| 午夜精品福利一区二区三区av| 久久精品国产一区二区三区免费看 | 99热精品在线观看| 国产午夜亚洲精品羞羞网站| 欧美不卡视频| 久久久av水蜜桃| 亚洲人成网站777色婷婷| 好看的日韩av电影| 校园激情久久| 日韩一级裸体免费视频| 玖玖在线精品| 西瓜成人精品人成网站| 日韩午夜一区| 亚洲国产精品成人| 韩日在线一区| 国产网站欧美日韩免费精品在线观看| 免费久久99精品国产| 久久久久天天天天| 亚洲欧美另类中文字幕| 一本一本a久久| 99精品欧美一区二区三区综合在线| 久久国产精品久久久| 欧美中文在线视频| 激情欧美一区二区三区在线观看| 亚洲深夜激情| 亚洲一区二区三区四区在线观看| 日韩午夜中文字幕| 亚洲精品久久久久久久久久久久久| 国产麻豆午夜三级精品| 国产精品视频不卡| 欧美视频精品在线| 欧美精品一卡| 国产酒店精品激情| 好看不卡的中文字幕| 亚洲欧洲精品天堂一级| 亚洲精品你懂的| 亚洲靠逼com| 亚洲欧美日韩国产综合在线 | 欧美一区二区视频免费观看| 亚洲欧美日韩第一区| 欧美在线视频在线播放完整版免费观看| 亚洲欧美成人一区二区三区| 欧美诱惑福利视频| 欧美二区不卡| 黑丝一区二区| 中文国产一区| 猫咪成人在线观看| 亚洲午夜久久久久久尤物 | 亚洲三级免费| 久久久国产一区二区| 欧美日韩一区二区视频在线| 国产综合久久| 亚洲一区自拍| 亚洲精品欧美专区| 亚洲综合色丁香婷婷六月图片| 亚洲性感激情| 国产亚洲午夜| 夜夜嗨网站十八久久| 免费成人高清| 欧美综合77777色婷婷| 欧美精品一区二区三区高清aⅴ| 欧美美女喷水视频| 狠狠爱综合网| 久久成人精品一区二区三区| 日韩午夜在线| 国产精品久久九九| 欧美一区二区三区久久精品茉莉花 | 亚洲欧洲在线一区| 久久久久久久波多野高潮日日| 国产精自产拍久久久久久| 亚洲欧美韩国| 午夜视频在线观看一区二区三区| 国产精品蜜臀在线观看| 欧美一区二区三区四区高清 | 国产真实乱偷精品视频免| 国产精品日韩专区| 久久国产手机看片| 另类图片综合电影| 亚洲深夜福利| 久热精品在线| 一区二区三区四区在线| 亚洲影院污污.| 国内伊人久久久久久网站视频| 欧美成人黄色小视频| 欧美日韩妖精视频| 欧美专区第一页| 欧美精品午夜视频| 欧美专区一区二区三区| 欧美国产精品劲爆| 性欧美大战久久久久久久久| 亚洲欧美综合国产精品一区| 亚洲人成艺术| 久久亚洲精品一区二区| 羞羞答答国产精品www一本 | 欧美成人国产一区二区| 国产精品第一页第二页第三页| 久久综合色播五月| 国产精品美女久久福利网站| 欧美韩日视频| 亚洲国产美女精品久久久久∴| 欧美一级网站| 亚洲欧美在线看| 欧美午夜一区二区三区免费大片 | 久久久久久成人| 亚洲综合日韩| 久久九九久精品国产免费直播| 免费久久99精品国产| 亚洲第一在线综合网站| 国产精品99久久久久久白浆小说| 亚洲欧洲日本mm| 国产一区二区三区高清 | 午夜精品久久久99热福利| 亚洲一区二区三区在线播放| 欧美揉bbbbb揉bbbbb| 亚洲午夜一区二区三区| 亚洲伊人伊色伊影伊综合网| 国产精品黄色| 久久精品视频va| 免费亚洲电影在线观看| 韩国一区二区三区在线观看| 久久精品视频免费| 亚洲黄色av一区| 亚洲欧美激情诱惑| 国产亚洲激情在线| 欧美日韩免费高清| 欧美一区二区视频97| 亚洲欧洲三级| 久久精品一区二区三区不卡牛牛| 狠狠噜噜久久| 国产免费观看久久| 免播放器亚洲一区| 欧美一区二区三区四区在线观看| 美国十次成人| 亚洲欧美一区在线| 一区二区三区四区五区视频| 狠狠色丁香婷婷综合影院| 久久琪琪电影院| 亚洲综合999| 一区二区三区|亚洲午夜| 欧美jizz19性欧美| 午夜一区在线| 亚洲一区精彩视频| 在线视频免费在线观看一区二区| 欧美新色视频| 欧美天天视频| 欧美视频在线观看免费网址| 欧美黄色一区二区| 久久人人超碰| 欧美不卡在线视频| 欧美 日韩 国产一区二区在线视频 | 欧美www视频| 亚洲一区二区欧美| 一区二区欧美视频| 午夜视频精品| 欧美在线日韩精品| 久久综合色播五月| 欧美—级在线免费片| 欧美日韩不卡合集视频| 欧美三级第一页| 国产精品日韩久久久久| 国产自产2019最新不卡| 韩国三级在线一区| 亚洲最黄网站| 在线中文字幕一区| 亚洲女与黑人做爰| 老妇喷水一区二区三区| 亚洲黄色免费| 一本色道婷婷久久欧美| 99riav国产精品| 久久精品30| 欧美午夜精品久久久久久人妖| 国产精品久久二区| 国产一区二区日韩精品欧美精品| 国产亚洲精品bt天堂精选| 亚洲精品专区| 麻豆精品视频在线| 亚洲一区二区成人在线观看| 久久精品99国产精品日本| 欧美精品一区二区久久婷婷| 国产欧美一区二区在线观看| 亚洲免费观看| 欧美刺激午夜性久久久久久久| 日韩一二三区视频| 欧美日韩国产精品一卡|