pat a 1166

14051 단어
샘플 만 검 증 했 습 니 다.
이 문 제 는 팀 내 모든 사람 이 친구 이 고 한 사람 을 임의로 넣 으 면 이런 관 계 를 망 칠 수 있다 면 Area% d is OK 를 출력 하 라 고 합 니 다. \;만약 그룹 내 모든 사람 이 친구 이지 만 다른 사람 을 넣 고 이런 관 계 를 유지 할 수 있다 면 Area% d may invite more people 을 출력 해 야 합 니 다. 예 를 들 어% d.;친구 가 아 닌 두 사람 이 있 으 면 Area% d needs help 를 출력 합 니 다.;그리고 코드 로 이 세 가지 상황 을 번역 했다. 나 는 빠 른 알고리즘 을 생각 하지 않 았 다.
#include 
#include 
#include 
using namespace std;

const int maxv=210;
int  g[maxv][maxv];
bool flag[maxv];


int main(){
	memset(g,0,sizeof(g));
	int n,m;
	cin>>n>>m;
	for(int i=0;i<m;i++){
		int v1,v2;
		cin>>v1>>v2;
		g[v1][v2]=1;
		g[v2][v1]=1;
	}
	int k;
	cin>>k;
	for(int i=1;i<=k;i++){
		int num;
		cin>>num;
		vector<int> list;
		memset(flag,false,sizeof(flag));
		for(int j=0;j<num;j++){
			int id;
			cin>>id;
			list.push_back(id);
			flag[id]=true;
		}
		bool isallfriend=true;
		for(int j=0;j<list.size()-1;j++){
			for(int l=j+1;l<list.size();l++){
				if(g[list[j]][list[l]]==0){
					isallfriend=false;
					break;
				}
			}
			if(isallfriend==false){
				break;
			}
		}
		bool ismax=true;
		int addfriend;
		for(int j=1;j<=n;j++){
			int cnt=0;
			if(flag[j]==false){
				for(int l=0;l<list.size();l++){
					if(g[j][list[l]]==1){
						cnt++;
					}
				}
				if(cnt==list.size()){
					ismax=false;
					addfriend=j;
					break;
				}
			}
		}
		if(ismax&&isallfriend){
			printf("Area %d is OK.
"
,i); }else if(isallfriend&&ismax==false){ printf("Area %d may invite more people, such as %d.
"
,i,addfriend); }else{ printf("Area %d needs help.
"
,i); } } return 0; }

좋은 웹페이지 즐겨찾기