排座位(天梯)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/beijiafei/article/details/80069000
#include <iostream>
using namespace std;
struct Goodfris{
	int fris[101];//好朋友 
	int time;//好朋友的个数 
};
int com(Goodfris a,Goodfris b){//判断关系为2的情况 
	int timeRow = a.time;
	int timeCol = b.time;
	for(int i=0;i<timeRow;i++){
		for(int j=0;j<timeCol;j++){
			if(a.fris[i] == b.fris[j]){
				return 1;
			}
		}
	}
	return -1;
}

int main(){
	//freopen("in.txt","r",stdin);
	Goodfris good[101];
	int N; //前来参宴的宾客总人数,则这些人从1到N编号
	int M; //M为已知两两宾客之间的关系数
	int K; //K为查询的条数
	cin>>N>>M>>K;
	int rela[101][101];//总关系 
	int now[10005][3];  //M的关系 
	for(int i=0;i<M;i++){
		cin>>now[i][0]>>now[i][1]>>now[i][2];
	}
	int find[10005][2];  //要找的关系 
	for(int i=0;i<K;i++){
		cin>>find[i][0]>>find[i][1];
	}
	for(int i=0;i<N;i++){
		for(int j=0;j<N;j++){
			rela[i][j] = 0;//不是朋友,也不敌对 
			rela[j][i] = 0; 
		}
		good[i].time = 0;//初始化 
	} 
	for(int i=0;i<M;i++){//根据条件,得出的关系 
		int row = now[i][0];
		int col = now[i][1];
		int res = now[i][2];
		rela[row][col] = res;
		rela[col][row] = res;//关系是相互的 
	}
	for(int i=0;i<M;i++){//判断每一个人的好朋友 
		if(now[i][2] == 1){
			int row = now[i][0];
			int col = now[i][1];
			int timeRow = good[row].time;
			int timeCol = good[col].time;
			good[row].fris[timeRow] = col;
			good[row].time += 1;
			good[col].fris[timeCol] = row;
			good[col].time +=1;
		} 
	}
	for(int i=0;i<M;i++){//敌人的共同朋友 
		if(now[i][2] == -1){
			int row = now[i][0];//
			int col = now[i][1];
			if(com(good[row],good[col]) == 1){//最后的bug 
				rela[row][col] = 2;
				rela[col][row] = 2;
			} 
		}
	}
	for(int i=0;i<K;i++){
		int row = find[i][0];
		int col = find[i][1];
		if(rela[row][col] == 1){ //如果两位宾客之间是朋友,且没有敌对关系
			cout<<"No problem"<<endl;
		}
		else if(rela[row][col] == 0){ //如果他们之间并不是朋友,但也不敌对
			cout<<"OK"<<endl;
		} 
		else if(rela[row][col] == -1){ //如果他们之间只有敌对关系
			cout<<"No way"<<endl;
		}
		else if(rela[row][col] == 2){ //如果他们之间有敌对,然而也有共同的朋友
			cout<<"OK but..."<<endl;
		}
	} 
	//fclose(stdin);
	return 0;
}

没有完全AC的代码。

题目:https://www.patest.cn/contests/gplt/L2-010

猜你喜欢

转载自blog.csdn.net/beijiafei/article/details/80069000