6.8-娘娘站隊-模擬

延禧攻略
皇宮之中,乾隆皇帝嬪妃衆多,分爲多派,經常互相爭寵,乾隆皇帝正爲此發愁,
他請魏瓔珞替他想想辦法,希望後宮之中儘可能少的分派。

魏瓔珞把後宮中的衆多嬪妃叫來,每位嬪妃將自己要好的姐妹名字寫在一張字條上。
只要名單中有對方名字,就表示想與對方交好,則分在一派。

例如高貴妃名單中有純妃,純妃名單中有富察皇后,則她們三人都會歸爲一派,
如嫺妃名單中沒有任何人,其他嬪妃的名單中也沒有嫺妃,則嫺妃自己爲一派。

魏瓔珞給每位嬪妃編上號,從1開始,共有n位嬪妃,每個人的名單寫上想要交好的嬪妃編號,名單後面以0結尾。

互相交好或者間接交好的嬪妃分爲一派,最後魏瓔珞將分成的派別數上報給皇帝,皇帝十分滿意。
皇上詢問魏瓔珞是如何劃分的,魏瓔珞將統計的字條給皇上看,字條如下:

10 //有10位嬪妃
0 //1號嫺妃不想與任何人交好
5 3 0 //2號則希望能與5號3號姐妹一起
8 4 0
9 0
9 0
3 0
0
7 9 0
0
9 7 0

最後輸出派數爲 2,除了1號自己爲一派,其他人都分爲另外一派

1、比如3號與6號和8號交好,則他們仨應該取最小的作爲統一的標號;
2、同時,其他標號爲6或者8或者3的應該都統一成最小的那個標號;

#include<iostream>
#include<vector>
#include<map>
using namespace std;
int main()
{
	int n;
	cin>>n;
	int* g = new int[n+1];
	for(int i=0;i<n+1;i++)
	{
		g[i]=i;
	}
	for(int i=1;i<=n;i++)
	{
		int j;
		cin>>j;
		vector<int> tem;
		tem.push_back(i); 
		while(j != 0)
		{
			tem.push_back(j);
			cin>>j;
		}
		int min=g[tem[0]];
		for(int ii=0;ii<tem.size();ii++)
		{
			if(g[tem[ii]]<min)
			{
				min=g[tem[ii]];
			}
		}
		for(int ii=0;ii<tem.size();ii++)
		{
			g[tem[ii]]=min;
		}
		for(int ii=1;ii<=n;ii++)
		{
			for(int jj=0;jj<tem.size();jj++)
			{
				if(g[ii] == tem[jj])
				{
					g[ii]=min;
				}
			}
		}
	}
	map<int,int> tong;
	for(int i=1;i<=n;i++)
	{
		if(tong.find(g[i])==tong.end())
		{
			tong[g[i]]=1;
		}
	} 
	cout<<tong.size(); 
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章