总感觉自己哪里写错了,但就是找不到:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int t, n, m, f[2][100005], mini = 1e9;
int scc[100005], cnt;
vector<int> e[100005], p[3];
bool vis[100005];
void dfs(int x){
if(vis[x]){
return ;
}
scc[x] = cnt;
vis[x] = true;;
for(int i = 0; i < e[x].size(); i++){
dfs(e[x][i]);
}
}
void Sol(int g){
sort(p[g].begin(), p[g].end());
for(int i = 1; i <= n; i++){
int x = lower_bound(p[g].begin(), p[g].end(), i) - p[g].begin();
if(x < p[g].size()){
f[g][scc[i]] = min(f[g][scc[i]], abs(p[g][x] - i) * abs(p[g][x] - i));
}
if(x > 0){
f[g][scc[i]] = min(f[g][scc[i]], abs(p[g][x - 1] - i) * abs(p[g][x - 1] - i));
}
}
}
void Solve(){
cin >> t;
while(t--){
memset(vis, 0, sizeof(vis));
memset(f, 0x7f, sizeof(f));
memset(scc, 0, sizeof(scc));
p[0].clear();
p[1].clear();
cin >> n >> m;
for(int i = 1; i <= n; i++){
e[i].clear();
}
cnt = 0;
mini = LLONG_MAX;
for(int i = 1; i <= m; i++){
int u, v;
cin >> u >> v;
e[u].push_back(v);
e[v].push_back(u);
}
for(int i = 1; i <= n; i++){
if(!vis[i]){
cnt++;
dfs(i);
}
}
for(int i = 1; i <= n; i++){
if(scc[i] == scc[1]){
p[0].push_back(i);
}
else if(scc[i] == scc[n]){
p[1].push_back(i);
}
}
Sol(0);
Sol(1);
for(int i = 1; i <= cnt; i++){
mini = min(mini, f[0][i] + f[1][i]);
}
cout << mini << endl;
}
}
signed main(){
Solve();
return 0;
}