lanqiao3517 砍树(DFS)
This commit is contained in:
62
14lanqiao/test10-1.cpp
Normal file
62
14lanqiao/test10-1.cpp
Normal file
@@ -0,0 +1,62 @@
|
||||
// lanqiao3517 砍树(DFS)
|
||||
#include<bits/stdc++.h>
|
||||
using namespace std;
|
||||
#define int long long
|
||||
const int N = 1e5 + 9;
|
||||
vector<pair<int, int>> g[N];
|
||||
bool vis[N];
|
||||
int n, m, s[N], t[N];
|
||||
// 暴力解法: 枚举删除的边, 利用dfs查询数据对之间的连通性-时间复杂组为O(n^2m)
|
||||
bool dfs(int s, int t, int id){
|
||||
if(s == t){
|
||||
return true;
|
||||
}
|
||||
for(int i = 0; i < g[s].size(); i++){
|
||||
int nxt = g[s][i].first, edgeId = g[s][i].second;
|
||||
if(edgeId == id) continue;
|
||||
if(vis[nxt]) continue;
|
||||
vis[nxt] = 1;
|
||||
if(dfs(nxt, t, id)) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
signed main(){
|
||||
cin >> n >> m;
|
||||
for(int i = 1; i < n; i++){
|
||||
int u, v; cin >> u >> v;
|
||||
g[u].push_back({v, i});
|
||||
g[v].push_back({u, i});
|
||||
}
|
||||
for(int i = 1; i <= m; i++){
|
||||
cin >> s[i] >> t[i];
|
||||
}
|
||||
// 枚举需要删除的边的编号-从大到小枚举
|
||||
for(int i = n - 1; i >= 1; i--){
|
||||
bool flag = true;
|
||||
for(int j = 1; j <= m; j++){
|
||||
memset(vis, 0, sizeof vis);
|
||||
vis[s[j]] = 1;
|
||||
if(dfs(s[j], t[j], i)){
|
||||
flag = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(flag){
|
||||
cout << i << ' ';
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
cout << -1 << endl;
|
||||
return 0;
|
||||
}
|
||||
/* test samples -> 4
|
||||
6 2
|
||||
1 2
|
||||
2 3
|
||||
4 3
|
||||
2 5
|
||||
6 5
|
||||
3 6
|
||||
4 5
|
||||
*/
|
||||
Reference in New Issue
Block a user