社区讨论
暴力代码求条
P8867[NOIP2022] 建造军营参与者 2已保存回复 13
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 13 条
- 当前快照
- 1 份
- 快照标识符
- @m3mt96ml
- 此快照首次捕获于
- 2024/11/18 17:15 去年
- 此快照最后确认于
- 2025/11/04 23:31 4 个月前
1~3 10~11数据
期望得分 25
实际得分 10
CPP#include <bits/stdc++.h>
#define int long long
using namespace std;
const int mod = 1000000007ll, N = 1000010, M = 10010;
int n, m, u[N], v[N], f[N], ans, ff[M], k;
vector <int> e[M], l;
queue <int> q;
int check()
{
q.push(l[0]);
int x;
for (int i = 1; i <= n; i++)
ff[i] = 0;
ff[l[0]] = 1;
while(!q.empty())
{
x = q.front();
q.pop();
for (auto i : e[x])
{
if (ff[i] == 0)
{
q.push(i);
ff[i] = 1;
}
}
}
for (auto i : l)
if (!ff[i])
return 0;
return 1;
}
int dfs2(int i)
{
if (i > m)
return check();
int anss = dfs2(i + 1);
e[u[i]].push_back(v[i]);
e[v[i]].push_back(u[i]);
anss += dfs2(i + 1);
e[u[i]].pop_back();
e[v[i]].pop_back();
return anss;
}
int dfs(int x)
{
if (x > n)
return dfs2(1);
l.push_back(x);
int anss = dfs(x + 1);
l.pop_back();
if (x == n && l.size() == 0)
return anss;
return anss + dfs(x + 1);
}
signed main()
{
cin >> n >> m;
for (int i = 1; i <= m; i++)
scanf("%lld%lld", u + i, v + i);
if (n > 100)
{
f[0] = 1;
for (int i = 1; i <= n; i++)
f[i] = (f[i - 1] << 1ll) % mod;
for (int i = 1; i <= n; i++)
(ans += (f[n - i] * f[max(0ll, i - 2)] % mod) * (n - i + 1) % mod) %= mod;
printf("%lld", ans);
return 0;
}
printf("%lld", dfs(1));
}
回复
共 13 条回复,欢迎继续交流。
正在加载回复...