Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include <algorithm>
- #include <queue>
- #include <string>
- using namespace std;
- bool used[100];
- queue<int> Q;
- pair<int, int> BFS(int start, vector<int> graph[]) {
- int ans = 0;
- int ansV = 1;
- used[start] = true;
- Q.push(start);
- while (!Q.empty()) {
- int u = Q.front();
- Q.pop();
- for (int i = 0; i < graph[u].size(); i++) {
- ans++;
- int v = graph[u][i];
- if (!used[v]) {
- ansV++;
- used[v] = true;
- Q.push(v);
- }
- }
- }
- return pair<int, int>(ans / 2, ansV);
- }
- class Permatchd2 {
- public:
- int fix(vector<string> graph) {
- int n = graph.size();
- vector<int> newGraph[n + 2];
- for (int i = 1; i <= n; i++)
- newGraph[i].resize(0);
- for (int i = 0; i < n; i++) {
- for (int j = i + 1; j < n; j++) {
- if (graph[i][j] == 'Y') {
- newGraph[i + 1].push_back(j + 1);
- newGraph[j + 1].push_back(i + 1);
- }
- }
- }
- int odd = 0, klika = 0, even = 0;
- for (int i = 1; i <= n; i++) {
- if (!used[i]) {
- pair<int, int> p = BFS(i, newGraph);
- if (p.first % 2 == 1) {
- odd++;
- if ((p.second * (p.second - 1)) / 2 == p.first) klika++;
- } else even++;
- }
- }
- if (odd == 0) return 0;
- if (odd == 1) {
- if (even == 0 && klika == 1) return -1;
- return 1;
- }
- return odd;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement