ในปัญหานี้ เราได้รับกราฟของโหนด N งานของเราคือ ค้นหาค่าสูงสุดที่เป็นไปได้ของค่าต่ำสุดของอาร์เรย์ที่แก้ไข
สำหรับกราฟ เรามีการเรียงสับเปลี่ยนของโหนด ซึ่งเป็นจำนวนการเหนี่ยวนำที่มีอย่างน้อย 1 โหนดทางด้านซ้ายของโหนดซึ่งมีขอบร่วมกัน
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
Input : N = 4, edge = {{1, 2}, {2, 3}, {3, 4}, {4, 1}}
Output : 3 แนวทางการแก้ปัญหา
วิธีแก้ปัญหาอย่างง่ายคือโดยการสำรวจต้นไม้จากโหนดหนึ่งไปยังโหนดที่อยู่ติดกันทั้งหมด เราจะค้นหาการเปลี่ยนแปลงของโหนดโดยใช้สูตรของจำนวนโหนดที่เชื่อมต่อ
สูตรคือ
ขนาดของส่วนประกอบ - 1.
ตัวอย่าง
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
#include <bits/stdc++.h>
using namespace std;
int dfs(int x, vector<int> adjMat[], int visited[]){
int sz = 1;
visited[x] = 1;
for (auto ch : adjMat[x])
if (!visited[ch])
sz += dfs(ch, adjMat, visited);
return sz;
}
int maxValPermutationGraph(int n, vector<int> adjMat[]){
int val = 0;
int visited[n + 1] = { 0 };
for (int i = 1; i <= n; i++)
if (!visited[i])
val += dfs(i, adjMat, visited) - 1;
return val;
}
int main(){
int n = 4;
vector<int> adjMat[n + 1] = {{1, 2}, {2, 3}, {3, 4}, {4, 1}};
cout<<"The maximum value permutation of a graph is "<<maxValPermutationGraph(n, adjMat);
return 0;
} ผลลัพธ์
The maximum value permutation of a graph is 3