直接暴力求解,枚举每个点,
dfs 求解对后面影响的点的个数
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <vector>
#include <set>
#include <stack>
#include <map>
#include <climits>
using namespace std;
typedef long long ll;
const int maxn = 150 + 7, INF = 0x3f3f3f3f, mod = 1e9 + 7;
int n, id, m, cnt;
set<int> st;
int head[maxn], ans[maxn];
bool vis[maxn];
struct node {
int v;
int next;
}a[maxn*maxn*2];
void add(int u, int v) {
a[cnt].v = v;
a[cnt].next = head[u];
head[u] = cnt++;
}
void init() {
memset(ans, 0, sizeof ans);
memset(head, -1, sizeof head);
cnt = 0;
for(int i = 0; i < m; ++i) {
int u, v;
scanf("%d %d", &u, &v);
add(u, v);
add(v, u);
}
}
void dfs(int u) {
if(vis[u]) return;
vis[u] = true;
st.insert(u);
int i = head[u];
for( ; i != -1; i = a[i].next) {
if(vis[a[i].v]) continue;
dfs(a[i].v);
}
}
void solve() {
for(int i = 1; i <= n; ++i) {
st.clear();
memset(vis, false, sizeof vis);
vis[i] = true;
//cout << i << " :" << ;
dfs(id);
ans[i] = n - st.size() - 1;
}
int max_ = 0, anss = 0;
for(int i = 1; i <= n; ++i) {
if(i == id) continue;
//cout << ans[i] << " ";
if(ans[i] > max_) { max_ = ans[i]; anss = i; }
}
cout << anss << endl;
}
int main() {
//cout << " 2333 " << endl;
while(~scanf("%d", &n) && n) {
scanf("%d %d", &id, &m);
init();
solve();
}
return 0;
}