社区讨论
35pts只错#11#14求条
P11409西湖有雅座参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mhz4holi
- 此快照首次捕获于
- 2025/11/15 01:19 4 个月前
- 此快照最后确认于
- 2025/11/16 13:59 4 个月前
CPP
#include <bits/stdc++.h>
#define int long long
#define double long double
using namespace std;
const int N = 1010;
int a[N], vis[N], c[2], mp[N][N], n;
void dfs(int p)
{
c[vis[p]] ++;
for (int i = 1; i <= n; i ++)
{
if (mp[i][p])
{
if (vis[i] == vis[p])
{
cout << -1 << endl;
exit(0);
}
if (vis[i] == -1)
{
vis[i] = 1 - vis[p];
dfs(i);
}
}
}
}
signed main()
{
cin.tie(0)->sync_with_stdio(0);
int h, w;
cin >> n >> h >> w;
for (int k = 1; k <= n; k ++)
{
for (int i = 0; i < h; i ++)
for (int j = 0; j < w; j ++)
{
int x;
cin >> x;
a[k] |= x << i * w + j;
}
//a[k] = ~a[k] & (1ll << h * w) - 1;
}
for (int i = 1; i <= n; i ++)
{
for (int j = 1; j < i; j ++)
{
if (__builtin_popcount(a[i] & a[j]) >= (min(__builtin_popcount(a[i]), __builtin_popcount(a[j])) + 1) / 2)
mp[i][j] = mp[j][i] = 0;
else
mp[i][j] = mp[j][i] = 1;
}
}
memset(vis, -1, sizeof(vis));
int ans = 0;
for (int i = 1; i <= n; i ++)
{
if (vis[i] == -1)
{
c[0] = 0, c[1] = 0;
vis[i] = 0;
dfs(i);
ans += max(c[0], c[1]);
}
}
cout << ans << endl;
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...