【2021四川省赛】E.Don‘t Really Like How The Story Ends 图论
生活随笔
收集整理的這篇文章主要介紹了
【2021四川省赛】E.Don‘t Really Like How The Story Ends 图论
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
2021四川省賽E
Don’t Really Like How The Story Ends
題目大意
給圖加邊,使得一個可能的DFS序列剛好是從1到n
Time : 1000 ms
Memory: 262144 kB
解題思路及分析
第一次打正式比賽,場上E因為自己的nt行為T了好幾發(fā),這個是賽后補題
直接搜索,但是需要有一定條件
如果想要DFS序列剛好為從1到N,需要滿足的條件:
AC代碼
#include <bits/stdc++.h> typedef long long llong; const int N = 1e5 + 5; using namespace std; vector<int> mp[N]; bool vis[N]; int cnt; int n, m, nxt;void dfs(int u) {nxt++;for (int i = 0; i < mp[u].size(); i++) {int to = mp[u][i];if (vis[to]) continue;if (to == nxt) { // [1]vis[nxt] = true;dfs(nxt);} else { // [2]cnt++;vis[nxt] = true;dfs(nxt);i--;} }if (u == 1) { // [3] [4]while (nxt <= n) {vis[nxt] = true;dfs(nxt);cnt++;}} }int main() {ios::sync_with_stdio(false);cin.tie(0);int T; cin >> T;while (T--) {cin >> n >> m;for (int i = 1; i <= n; i++) {mp[i].clear();vis[i] = false;}nxt = 1;cnt = 0;for (int i = 0; i < m; i++) {int u, v;cin >> u >> v;if (u < v) mp[u].push_back(v);if (u > v) mp[v].push_back(u); // 一個小優(yōu)化,只由編號小的節(jié)點連接到編號大的節(jié)點}for (int i = 1; i <= n; i++) {sort(mp[i].begin(), mp[i].end()); // 這里進行排序,就可以保證每次訪問的節(jié)點都是最小的,方便判斷剛剛解題思路中說的條件// 不要用堆,親測會T(場上nt的我)}vis[1] = true;dfs(1);cout << cnt << endl;}return 0; }總結(jié)
以上是生活随笔為你收集整理的【2021四川省赛】E.Don‘t Really Like How The Story Ends 图论的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: systemd介绍
- 下一篇: 计算机的cut代表什么意思,cut是什么