CE 求助
查看原帖
CE 求助
685964
shuqiang楼主2024/10/30 14:01
#include<vector>

using namespace std; 

const int N = 3e7 + 10;
int ans[N];
vector<int> gp[4];

bool check(int x1, int x2, int x3, int x4){
	if(x1 == x3 || x1 == x4 || x2 == x3 || x2 == x4) return 0;
	return 1;
}

int* find_pairs(int n, int m, int u[], int v[]){
	for(int i = 0; i < m; i++) ans[i] = -1;
	for(int i = 0; i < m; i++){
		if(u[i] == u[1] && v[i] == v[1]){
			gp[0].push_back(i);
		}
		else if(u[i] == u[1] || v[i] == u[1]){
			gp[1].push_back(i);
		}
		else if(u[i] == v[1] || v[i] == v[1]){
			gp[2].push_back(i);
		}
		else{
			gp[3].push_back(i);
		}
	}
	if(gp[3].size()) ans[1] = gp[3][0];
	for(int i: gp[3]){
		ans[i] = 1;
	}
	for(int i: gp[1]){
		for(int j: gp[2]){
			if(check(u[i], v[i], u[j], v[j])){
				ans[i] = j;
				break;
			}
		}
		if(ans[i] == 0){
			for(int j: gp[3]){
				if(check(u[i], v[i], u[j], v[j])){
					ans[i] = j;
					break;
				}
			}
		}
	}
	for(int i: gp[2]){
		for(int j: gp[1]){
			if(check(u[i], v[i], u[j], v[j])){
				ans[i] = j;
				break;
			}
		}
		if(ans[i] == 0){
			for(int j: gp[3]){
				if(check(u[i], v[i], u[j], v[j])){
					ans[i] = j;
					break;
				}
			}
		}
	}
	return ans;
}
2024/10/30 14:01
加载中...