[USACO09FEB]环绕岛屿Surround the Islands

[Time Gate]

https://www.luogu.org/problemnew/show/P2941

【解题思路】

Tarjan缩点,再在所有强连通分量中找一条最小的边作为强连通分量的边,因为还要回来,所以Ans最后要乘二

【code】

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 inline int read()
 4 {
 5     int x=0;
 6     char c=getchar();
 7     bool flag=0;
 8     while(c<‘0‘||c>‘9‘) {if(c==‘-‘)flag=1;c=getchar();}
 9     while(c>=‘0‘&&c<=‘9‘){x=(x+(x<<2)<<1)+ c-‘0‘;c=getchar();}
10     return flag?-x:x;
11 }
12 const int N=5005;
13 int n,step,tcl,ans=1e9+7;
14 vector<int>G[N];
15 vector<int>cg[N];
16 int dfn[N],vis[N],col[N],low[N];
17 stack<int>s;
18 int d[N][N];
19 inline void tarjan(int now)
20 {
21     vis[now]=1;
22     s.push(now);
23     low[now]=dfn[now]=++step;
24     for(int i=0;i<G[now].size();++i)
25     {
26         int to=G[now][i];
27         if(!dfn[to])
28         {
29             tarjan(to);
30             low[now]=min(low[now],low[to]);
31         }
32         else if(vis[to]) low[now]=min(low[now],dfn[to]);
33     }
34     if(dfn[now]==low[now])
35     {
36         col[now]=++tcl;
37         vis[now]=0;
38         while(1)
39         {
40             int x=s.top();s.pop();
41             col[x]=tcl;
42             vis[x]=0;
43             if(now==x) break;
44         }
45     }
46 }//板子
47 int main()
48 {
49     n=read();
50     for(int i=1;i<=n;++i)
51     {
52         int x=read(),y=read();
53         G[x].push_back(y),G[y].push_back(x);
54     }//双向边
55     for(int i=1;i<=n;++i) if(!dfn[i]) tarjan(i);
56     memset(d,0x3f3f,sizeof(d));//初始化(我就是忘记然后挂了一次)
57     for(int i=1;i<=n;++i)
58     {
59       for(int j=1;j<=n;++j)
60       {
61         int x=read();
62         if(i==j) continue;
63         d[col[i]][col[j]]=min(d[col[i]][col[j]],x);
64       }
65     }
66     for(int i=1;i<=tcl;++i)
67     {
68         int res=0;
69         for(int j=1;j<=tcl;++j) if(i!=j) res+=d[i][j];
70         ans=min(ans,res);
71     }//暴力枚举答案
72     printf("%d\n",ans*2);
73 }

原文地址:https://www.cnblogs.com/66dzb/p/11161387.html

时间: 2024-10-14 15:42:35

[USACO09FEB]环绕岛屿Surround the Islands的相关文章

环绕岛屿Surround the Islands

题目描述 Farmer John has bought property in the Caribbean and is going to try to raise dairy cows on a big farm composed of islands. Set in his ways, he wants to surround all the islands with fence. Each island in the farm has the shape of a polygon. He

BZOJ3397: [Usaco2009 Feb]Surround the Islands 环岛篱笆

3397: [Usaco2009 Feb]Surround the Islands 环岛篱笆 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 11  Solved: 7[Submit][Status] Description 约翰在加勒比海买下地产,准备在这里的若干个岛屿上养奶牛.所以,他要给所有岛屿围上篱笆.每个岛屿都是多边形.他沿着岛屿的一条边界朝一个方向走,有时候坐船到另一个岛去.他可以从任意一个多边形顶点开始修篱笆的工作:在任意一个到达的顶点

[Usaco2009 Feb]Surround the Islands 环岛篱笆

Description 约翰在加勒比海买下地产,准备在这里的若干个岛屿上养奶牛.所以,他要给所有岛屿围上篱笆.每个岛屿都是多边形.他沿着岛屿的一条边界朝一个方向走,有时候坐船到另一个岛去.他可以从任意一个多边形顶点开始修篱笆的工作:在任意一个到达的顶点,他可以坐船去另一个岛屿的某个顶点,但修完那个岛的篱笆,他必须马上原路返回这个出发的岛屿顶点.任意两个顶点间都有肮线,每条航线都需要一定的费用.请帮约翰计算最少的费用,让他修完所有篱笆. Input 第1行输入N(3≤N≤500),表示所有岛屿多边

国家二字码对照表

中文国家名 英文国家名 大洲 二位简码 法属南部领地 French Southern Territories Europe TF 夏威夷 Hawaii North America HW 阿拉斯加 Alaska North America AK 新西兰属土岛屿 New Zealand Islands Territories Oceania XL 加罗林群岛 Caroline Islands Asia XK 巴利阿里群岛 Balearic Islands Europe XJ 马德拉群岛 Madeir

游戏中常见(或必须)的42种要素

主要概括为以下几种 人物特效 光特效 粒子特效 物理效果 声音特效 天气特效 1. 水体效果 water effects 2. 血液消失的效果disappearing blood effects 3. 霓虹灯样的粒子系统neon particle system 4. 卡通着色cel-shading 5. 反射reflection 6. 能在头盔前的玻璃中看到自己的反射visor reflection 7. 环绕立体声surround sound 8. 立体3Dstereoscopic 3D 9.

[LeetCode] Number of Islands II 岛屿的数量之二

A 2d grid map of m rows and n columns is initially filled with water. We may perform an addLand operation which turns the water at position (row, col) into a land. Given a list of positions to operate, count the number of islands after each addLand o

[LeetCode] 200. Number of Islands 岛屿的数量

Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by

LeetCode | 0200. Number of Islands岛屿数量【Python】

LeetCode 0200. Number of Islands岛屿数量[Medium][Python][DFS] Problem LeetCode Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontally or v

lintcode 容易题:Number of Islands 岛屿的个数

题目: 岛屿的个数 给一个01矩阵,求不同的岛屿的个数. 0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛.我们只考虑上下左右为相邻. 样例 在矩阵: [ [1, 1, 0, 0, 0], [0, 1, 0, 0, 1], [0, 0, 0, 1, 1], [0, 0, 0, 0, 0], [0, 0, 0, 0, 1] ] 中有 3 个岛. 解题: 在网上看到是根据深度优先算法,和递归思想进行解决的题目,当发现这一点是1的时候,将周围的点都设置成 0,如何设置成 0?第一步:将当前