~~去你的萌新求助~~
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