日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GDUT_排位赛题解报告_第2场_Fence Planning

發布時間:2024/1/18 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GDUT_排位赛题解报告_第2场_Fence Planning 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目:

A. Fence Planning
time limit per test1 second
memory limit per test256 megabytes
inputstandard input
outputstandard output
Farmer John’s N cows, conveniently numbered 1…N (2≤N≤105), have a complex social structure revolving around “moo networks” — smaller groups of cows that communicate within their group but not with other groups. Each cow is situated at a distinct (x,y) location on the 2D map of the farm, and we know that M pairs of cows (1≤M<105) moo at each-other. Two cows that moo at each-other belong to the same moo network.

In an effort to update his farm, Farmer John wants to build a rectangular fence, with its edges parallel to the x and y axes. Farmer John wants to make sure that at least one moo network is completely enclosed by the fence (cows on the boundary of the rectangle count as being enclosed). Please help Farmer John determine the smallest possible perimeter of a fence that satisfies this requirement. It is possible for this fence to have zero width or zero height.

Input
The first line of input contains N and M. The next N lines each contain the x and y coordinates of a cow (nonnegative integers of size at most 108). The next M lines each contain two integers a and b describing a moo connection between cows a and b. Every cow has at least one moo connection, and no connection is repeated in the input.

Output
Please print the smallest perimeter of a fence satisfying Farmer John’s requirements.

Example
inputCopy
7 5
0 5
10 5
5 0
5 10
6 7
8 6
8 4
1 2
2 3
3 4
5 6
7 6
outputCopy
10

這個題就是說,給出各個點坐標,和M條點之間路徑,求一個能罩住某一個連通塊的長方形最小周長。

題意很簡單,但是我并查集沒有學到位,竟然不是到father函數的路徑壓縮return fa[a]=father(fa[a]);瘋狂tle,打完比賽,一看,被這種路徑壓縮神仙操作秀到了。

思路就是通過并查集和簡單枚舉找到每一個連通塊的答案,然后輸出最小那個就好了。
代碼:

#include <iostream> #include <algorithm> #include <cstdio> #include <cmath> #include <cstring> #include <string> #include <climits> #include <queue> #include <stack> #include <map> //鬼畜頭文件 using namespace std; const int INF = 0x3f3f3f3f; //1.06e9大小 const int mod = 1e9+7; typedef unsigned long long ULL; typedef long long LL; //鬼畜define int n,m; int all[100010][2]; int fa[100010]; typedef struct coor {int MINX,MAXX,MINY,MAXY; }; int father(int k) {if(fa[k]==k)return k;else return fa[k]=father(fa[k]); } coor ans[100010]; int main() {scanf("%d %d",&n,&m);for(int time=0;time<n;time++){fa[time]=time;scanf("%d %d",&all[time][0],&all[time][1]);}for(int time=0;time<m;time++){int from,to;scanf("%d %d",&from,&to);from--;to--;fa[father(from)]=father(to);}for(int time=0;time<n;time++){father(time);}int num=0;for(int time=0;time<n;time++){if(fa[time]==time){ans[time].MINX=INF;ans[time].MAXX=0;ans[time].MINY=INF;ans[time].MAXY=0;}}int C=INF;for(int time=0;time<n;time++){//MINX,MAXX,MINY,MAXYans[father(time)].MINX=min(ans[father(time)].MINX,all[time][0]);ans[father(time)].MAXX=max(ans[father(time)].MAXX,all[time][0]);ans[father(time)].MINY=min(ans[father(time)].MINY,all[time][1]);ans[father(time)].MAXY=max(ans[father(time)].MAXY,all[time][1]);}for(int time=0;time<n;time++){if(fa[time]==time){//printf("%d %d %d %d\n",ans[father(time)].MAXY,ans[father(time)].MINY,ans[father(time)].MAXX,ans[father(time)].MINX);C=min(C,ans[father(time)].MAXY-ans[father(time)].MINY+ans[father(time)].MAXX-ans[father(time)].MINX);}}printf("%d\n",C*2);return 0; }

總結

以上是生活随笔為你收集整理的GDUT_排位赛题解报告_第2场_Fence Planning的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。