1. 程式人生 > >【2018京東機考】 完全多部圖

【2018京東機考】 完全多部圖

在這裡插入圖片描述

在這裡插入圖片描述

//對於每一個頂點,尋找其集合,,去掉重複集合後,剩下的集合中若有重複頂點,就不是完全多部圖
#include<iostream>
#include<vector>
#include<set>
using namespace std;
void fun(vector<vector<int>> &vec, int N, int M) {
	vector<vector<int>> p(N+1);
	for (int i = 1; i <= N; i++) {//對於每一個頂點,尋找它的集合
		for (
int j = 1; j <= N; j++) { if (vec[i][j] == 0) { p[i].push_back(j); } } } set<vector<int>> s; for (int i = 1; i <= N; i++) { s.insert(p[i]); }//去掉重複的集合 vector<int> num(N + 1); for (auto it = s.begin(); it != s.end(); it++) {//剩下的所有集合,加起來應該是頂點的集合,如果不是,說明不是完全多部圖 for
(int i = 0; i < it->size(); i++) { if (num[(*it)[i]] == 0) { num[(*it)[i]]++; } else { cout << "No\n"; return; } } } cout << "Yes\n"; return; } int main() { int T; cin >> T; for (int i = 0; i < T; i++) { int N, M; cin >> N >> M;
vector<vector<int>> vec(N+1, vector<int>(N+1, 0)); for (int j = 0; j < M; j++) { int p1, p2; cin >> p1 >> p2; vec[p1][p2] = 1; vec[p2][p1] = 1; } fun(vec, N, M); } return 0; }