一,問題描述
二,問題分析
分析題目n表示城市數量,m表示城市之間道路的數量,而道路不會形成環路,且輸入的a,b表示表示城市a有一條連向城市b的道路,說明是有向圖,要破壞一座城市,使得斷糧最多,即就是選擇一個城市,而這個城市就是 道路中起點次數最多的城市,採用一個數組記錄城市作爲起點的次數,注意城市的下標是從1開始的,所以數組要多開闢一個空間。
三,問題解答
#include<iostream>
#include<vector>
using namespace std;
int main() {
int n, m; //n 城市數,m道路數
cin >> n >> m;
vector<int> start(n + 1); //數組多開闢一個空間
for (int i = 0; i < m; i++) {
int a, b;
cin >> a >> b;
start[a]++;
}
int max = 0;
int maxid = 0;
for (int i = 0; i < start.size(); i++) { //選出起點數最多的城市,並記錄下標
if (start[i] > max) {
max = start[i];
maxid = i;
}
}
cout << maxid << endl; //輸出城市編號
return 0;
}