国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

hdu 5925 counts (二維離散化+dfs)

2019-11-08 18:32:00
字體:
來源:轉載
供稿:網友

題意:

在一個R*C的地圖上,有n個障礙點,問最終有多少個聯通塊,R,C的范圍是1到1e9

結題思路:

第一次將一個二維地圖離散化.

考慮x這一維的離散化,我們將障礙物之間那塊長度壓縮成一個點,用vetor記錄下來,每個障礙物也記錄下來,y這一維相同,這樣我們就得到了一個最大是400*400的點,那么我們就用普通的dfs求聯通塊的辦法去做就行了.

代碼:

#include <bits/stdc++.h>using namespace std;struct node{	int x;	int y;};int vis[506][506];vector<int> nx, ny;int dx[5]={-1,0,1,0};int dy[5]={0, 1, 0,-1};long long sum;void dfs(int x, int y){	if(x<0 || x>=(int)nx.size() || y>=(int)ny.size() || y<0)return;	sum+=(long long)nx[x]*(long long)ny[y];	int i;	vis[x][y]=1;	for(i=0; i<4; i++)	{		if(vis[x+dx[i]][y+dy[i]]==0)dfs(x+dx[i], y+dy[i]);	}	return ;}int main(){	int t;	cin>>t;	int e=1; 	while(t--)	{		int r, c;		memset(vis, 0, sizeof(vis));		scanf("%d%d", &r, &c);		int n;		scanf("%d", &n);		int i, j;		node barr[305];		int x[305], y[305];		for(i=0; i<n; i++)		{			scanf("%d%d", &barr[i].x, &barr[i].y);			x[i]=barr[i].x,y[i]=barr[i].y;	 		}		x[n]=0;		x[n+1]=r;		y[n]=0;		y[n+1]=c;		sort(x, x+n+2);		sort(y, y+n+2);		int xlen, ylen;		xlen=unique(x, x+n+2)-x;		ylen=unique(y, y+n+2)-y;		map<long long, long long>numx, numy;		for(i=1; i<xlen; i++)		{			if((x[i]-x[i-1])>1)nx.push_back(x[i]-x[i-1]-1);			nx.push_back(1);			numx[x[i]]=(int)nx.size()-1;		}		for(i=1; i<ylen; i++)		{			if((y[i]-y[i-1])>1)ny.push_back(y[i]-y[i-1]-1);			ny.push_back(1);			numy[y[i]]=(int)ny.size()-1;		}		memset(vis, 0, sizeof(vis));		for(i=0; i<n; i++)		{			vis[numx[barr[i].x]][numy[barr[i].y]]=1;			}		long long ans[100005];		int top=0;		PRintf("Case #%d:/n", e++);		for(i=0; i<(int)nx.size(); i++)		{			for(j=0; j<(int)ny.size(); j++)			{				sum=0;				if(vis[i][j]==0)				{					dfs(i,j);					if(sum)	 ans[top++]=sum;				}			}		}		printf("%d/n", top);		nx.clear();		vector<int>().swap(nx);		ny.clear();		vector<int>().swap(ny);		sort(ans, ans+top);		for(i=0; i<top; i++)		{			printf(i==top-1?"%lld/n":"%lld ", ans[i]);		}	}}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 剑川县| 凤翔县| 丰镇市| 广饶县| 雷波县| 东源县| 扎兰屯市| 龙陵县| 新安县| 孝昌县| 湖南省| 安宁市| 沂源县| 兴安县| 焦作市| 甘谷县| 永新县| 南丹县| 长宁区| 新民市| 贺兰县| 汽车| 晋城| 彭山县| 浦江县| 长岛县| 会同县| 本溪| 雅江县| 阜城县| 宝山区| 洪江市| 祁阳县| 巩义市| 灵石县| 遂溪县| 临汾市| 封开县| 洛浦县| 南安市| 贵定县|