← Back to List

5567번: 결혼식 ↗

Solutions

C++14
745 B | 745 chars
#include <iostream>
#define Mx 99999999
using namespace std;
int N,M,ar[550][550],a,b,check[550],Mincheck[550],Min,Cnt;
int main()
{
	cin>>N>>M;
	
	for(int x=0; x<=N; x++)
		for(int y=0; y<=N; y++)ar[x][y]=Mx;
		
	for(int x=0; x<M; x++)
	{
		cin>>a>>b;
		ar[a][b]=1;
		ar[b][a]=1;
	}
	for(int x=2; x<=N; x++) Mincheck[x]=Mx;
	Mincheck[1]=0;
	Mincheck[0]=1;
	for(int x=1; x<=N; x++)
	{
		int S=0; 
		Min=Mx;
		for(int y=1; y<=N; y++)
		{
			if(check[y]!=1&&Mincheck[y]<Min)
			{
				Min=Mincheck[y];
				S=y;
			}
		}
		check[S]=1;	
		for(int z=1; z<=N; z++)
		{
			if(Mincheck[z]>Mincheck[S]+ar[S][z])
			{
				Mincheck[z]=Mincheck[S]+ar[S][z];
			}
		}
	}
	for(int x=1; x<=N; x++)
	{
		if(1<=Mincheck[x]&&Mincheck[x]<=2) Cnt++;
	}
	cout<<Cnt;
}