萌新刚学OI求助

P5022 [NOIP2018 提高组] 旅行

~~去你的萌新求助~~
by Retired_lvmao @ 2019-07-04 16:08:03


```cpp // luogu-judger-enable-o2 #include <bits/stdc++.h> using namespace std; const int MAXN = 5000 + 5; int n, m; int start, End, cnt; bool connect[MAXN][MAXN], Visit[MAXN]; vector<int> edge[MAXN]; int ans[MAXN], route[MAXN]; int Read() { int x = 0; char ch; while(true) { ch = getchar(); if (!(ch >= '0' && ch <= '9')) break; x = x * 10 + ch - '0'; } return x; } inline bool cmp() { for (int i = 1; i <= n; i++) if (ans[i] != route[i]) return ans[i] > route[i]; return false; } inline void dfs1(int now) { Visit[now] = true; route[++cnt] = now; for (int i = 0; i < edge[now].size(); i++) if (connect[now][edge[now][i]] && !Visit[edge[now][i]]) dfs1(edge[now][i]); } inline void dfs2(int now) { Visit[now] = true; route[++cnt] = now; for (int i = 0; i < edge[now].size(); i++) if (!Visit[edge[now][i]]) dfs2(edge[now][i]); } int main() { for (int i = 0; i < MAXN; i++) ans[i] = INT_MAX; n = Read(); m = Read(); for (int i = 1; i <= m; i++) { start = Read(); End = Read(); edge[start].push_back(End); edge[End].push_back(start); connect[start][End] = true; connect[End][start] = true; } for (int i = 1; i <= n; i++) sort(edge[i].begin(), edge[i].end()); if (m == n) { for (int i = 1; i <= n; i++) for (int j = 0; j < edge[i].size(); j++) { connect[i][edge[i][j]] = false; connect[edge[i][j]][i] = false; dfs1(1); connect[i][edge[i][j]] = true; connect[edge[i][j]][i] = true; if (cnt == n && cmp()) for (int i = 1; i <= n; i++) ans[i] = route[i]; memset(Visit, false, sizeof Visit); cnt = 0; } } else { dfs2(1); for (int i = 1; i <= n; i++) ans[i] = route[i]; } for (int i = 1; i <= n; i++) printf("%d ", ans[i]); printf("\n"); return 0; } ``` [这一份](https://www.luogu.org/recordnew/show/20288616)跑的好像快一点,但还是TLE。
by fanhy @ 2019-07-04 16:09:49


我的代码明显比CZ优为什么**她**能AC我就不能QAQ
by fanhy @ 2019-07-04 16:11:10


@[chen_zhe](/space/show?uid=8457)
by Retired_lvmao @ 2019-07-04 16:13:53


要不要试试这个 ```cpp #pragma GCC optimize("Ofast") #pragma GCC optimize("inline") #pragma GCC optimize("-fgcse") #pragma GCC optimize("-fgcse-lm") #pragma GCC optimize("-fipa-sra") #pragma GCC optimize("-ftree-pre") #pragma GCC optimize("-ftree-vrp") #pragma GCC optimize("-fpeephole2") #pragma GCC optimize("-ffast-math") #pragma GCC optimize("-fsched-spec") #pragma GCC optimize("unroll-loops") #pragma GCC optimize("-falign-jumps") #pragma GCC optimize("-falign-loops") #pragma GCC optimize("-falign-labels") #pragma GCC optimize("-fdevirtualize") #pragma GCC optimize("-fcaller-saves") #pragma GCC optimize("-fcrossjumping") #pragma GCC optimize("-fthread-jumps") #pragma GCC optimize("-funroll-loops") #pragma GCC optimize("-fwhole-program") #pragma GCC optimize("-freorder-blocks") #pragma GCC optimize("-fschedule-insns") #pragma GCC optimize("inline-functions") #pragma GCC optimize("-ftree-tail-merge") #pragma GCC optimize("-fschedule-insns2") #pragma GCC optimize("-fstrict-aliasing") #pragma GCC optimize("-fstrict-overflow") #pragma GCC optimize("-falign-functions") #pragma GCC optimize("-fcse-skip-blocks") #pragma GCC optimize("-fcse-follow-jumps") #pragma GCC optimize("-fsched-interblock") #pragma GCC optimize("-fpartial-inlining") #pragma GCC optimize("no-stack-protector") #pragma GCC optimize("-freorder-functions") #pragma GCC optimize("-findirect-inlining") #pragma GCC optimize("-frerun-cse-after-loop") #pragma GCC optimize("inline-small-functions") #pragma GCC optimize("-finline-small-functions") #pragma GCC optimize("-ftree-switch-conversion") #pragma GCC optimize("-foptimize-sibling-calls") #pragma GCC optimize("-fexpensive-optimizations") #pragma GCC optimize("-funsafe-loop-optimizations") #pragma GCC optimize("inline-functions-called-once") #pragma GCC optimize("-fdelete-null-pointer-checks") ```
by shame_djj @ 2019-07-04 16:18:16


@[fanhy](/space/show?uid=51229) 在dfs那里做个剪枝,就是如果已经字典序比ans大了就退出
by WA鸭鸭 @ 2019-07-04 16:20:05


@[fanhy](/space/show?uid=51229) 或者用链式前向星会快一点吧
by WA鸭鸭 @ 2019-07-04 16:20:29


@[WA鸭鸭](/space/show?uid=93249) 奆佬链式前向星怎么排序啊%%%
by fanhy @ 2019-07-04 16:22:17


@[fanhy](/space/show?uid=51229) ~~这我还真不会~~,我用vector写的
by WA鸭鸭 @ 2019-07-04 16:23:43


@[WA鸭鸭](/space/show?uid=93249) ```cpp if (now > ans[cnt] && bo) return; if (now < ans[cnt]) bo = false; ``` 剪枝加了还是TLE QAQ
by fanhy @ 2019-07-04 16:33:55


| 下一页