QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#873627 | #7514. Clique Challenge | louisliang | WA | 0ms | 3712kb | C++14 | 2.1kb | 2025-01-26 18:47:22 | 2025-01-26 18:47:22 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
const int N = 1005, MOD = 1e9 + 7;
int n, m, d[N], p[N], msk1[N], msk2[N], g[1 << 22];
bool vis[N], e[N][N];
vector <int> vt;
map <int, int> mp;
int solve(){
vector <int> vl, vr;
vl.clear();
vr.clear();
for(int i = 0; i < vt.size(); i++){
if(i & 1)
vl.push_back(i);
else
vr.push_back(i);
}
int x = vl.size(), y = vr.size();
mp.clear();
for(int i = 0; i < y; i++)
mp[vr[i]] = i;
for(int i = 0; i < y; i++){
msk1[i] = 1 << i;
for(int j = 0; j < y; j++)
msk1[i] |= (int)e[vr[i]][vr[j]] << j;
}
for(int mask = 0; mask < (1 << y); mask++){
g[mask] = 1;
for(int j = 0; j < y; j++){
if(((mask >> j) & 1) && (msk1[j] & mask) != msk1[j]){
g[mask]--;
break;
}
}
}
for(int i = 0; i < y; i++)
for(int mask = (1 << y) - 1; ~mask; mask--)
if(!((mask >> i) & 1))
g[mask | (1 << i)] += g[mask];
for(int i = 0; i < x; i++){
msk1[i] = 1 << i;
for(int j = 0; j < x; j++)
msk1[i] |= (int)e[vl[i]][vl[j]] << j;
}
for(int i = 0; i < x; i++){
msk2[i] = 0;
for(int j = 0; j < y; j++)
msk2[i] |= (int)e[vl[i]][vr[j]] << j;
}
int sum = 0;
for(int mask = 0; mask < (1 << x); mask++){
bool flag = 1;
int t = (1 << y) - 1;
for(int i = 0; i < x; i++){
if(((mask >> i) & 1)){
if((msk1[i] & mask) != msk1[i]){
flag = 0;
break;
}
else
t &= msk2[i];
}
}
if(flag)
sum = (sum + g[t]) % MOD;
}
return sum;
}
int main(){
// freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m;
for(int i = 1; i <= n; i++)
p[i] = i;
for(int i = 1, u, v; i <= m; i++){
cin >> u >> v;
e[u][v] = e[v][u] = 1, d[u]++, d[v]++;
}
sort(p + 1, p + n + 1, [](int x, int y){return d[x] < d[y];});
int ans = 0;
for(int i = 1; i <= n; i++){
vis[p[i]] = 1;
vt.clear();
for(int j = i + 1; j <= n; j++)
if(e[p[i]][p[j]])
vt.push_back(p[j]);
ans = (ans + solve()) % MOD;
}
cout << ans << "\n";
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 3712kb
input:
3 2 1 2 2 3
output:
5
result:
ok single line: '5'
Test #2:
score: -100
Wrong Answer
time: 0ms
memory: 3712kb
input:
3 3 1 2 1 3 2 3
output:
6
result:
wrong answer 1st lines differ - expected: '7', found: '6'