bzoj2303
2024-08-23 01:10:46
并查集+数学
这道题网上好像有两种解法。
这位写的很可读:http://blog.csdn.net/unicornt_/article/details/51901225
然后看完大概就懂了做法,但是实现上还有很多细小的地方。
cnt要-1,因为第一行和第一列会算两次。
数组要开四倍。
至于为什么要拆成两个点,这是因为分开考虑01.
为什么两个flag都要赋值?因为有可能根是放在列上了,就判不到了。
还需要思考一下。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = ;
const ll mod = ;
struct dsu {
int fa[N * ];
void ini(int n)
{
for(int i = ; i <= n; ++i)
fa[i] = i;
}
int find(int x)
{
return x == fa[x] ? x : fa[x] = find(fa[x]);
}
void connect(int x, int y)
{
fa[find(x)] = find(y);
}
bool same(int x, int y)
{
return find(x) == find(y);
}
} u;
int n, m, k, s = -;
int x[N], y[N], c[N];
ll ans;
bool flag[N * ];
ll power(ll x, ll t)
{
ll ret = ;
for(; t; t >>= , x = x * x % mod) if(t & ) ret = ret * x % mod;
return ret;
}
void solve(int s)
{
u.ini( * n + * m + );
u.connect(, + * n);
u.connect(, + * n + );
for(int i = ; i <= k; ++i)
{
int p = ;
if(x[i] % == && y[i] % == ) p = ;
p = p ^ c[i] ^ s;
if(p)
{
u.connect(x[i] * , y[i] * + + * n);
u.connect(x[i] * + , y[i] * + * n);
}
else
{
u.connect(x[i] * , y[i] * + * n);
u.connect(x[i] * + , y[i] * + * n + );
}
}
int cnt = ;
memset(flag, , sizeof(flag));
for(int i = ; i <= n; ++i)
{
if(u.same(i * , i * + ))
return;
if(!flag[u.find(i * )])
{
flag[u.find(i * )] = flag[u.find(i * + )] = ;
++cnt;
}
}
for(int i = ; i <= m; ++i)
{
if(u.same(i * + * n, i * + * n + ))
return;
if(!flag[u.find(i * + * n)])
{
flag[u.find(i * + * n)] = flag[u.find(i * + * n + )] = ;
++cnt;
}
}
ans = (ans + power(2ll, cnt - )) % mod;
}
int main()
{
scanf("%d%d%d", &n, &m, &k);
for(int i = ; i <= k; ++i)
{
scanf("%d%d%d", &x[i], &y[i], &c[i]);
if(x[i] == && y[i] == ) s = c[i];
}
if(s != ) solve();
if(s != ) solve();
printf("%lld\n", ans);
return ;
}
最新文章
- SpringMVC学习--入门程序
- DSP using MATLAB 示例Example3.1 3.2 3.3
- HTML&;CSS学习笔记(一)
- 今天开始着手原来Office系统的重构
- [ASP.net教程]ASP.NET保存信息总结(Application、Session、Cookie、ViewState和Cache等)
- Java图形化界面设计——布局管理器之GridLayout(网格布局)
- 【百度地图API】如何快速创建带有标注的地图?——快速创建地图工具+如何标注商家
- Java编程题:&#160;写一个Singleton出来
- 关于CDN与缓存(浏览器和CDN)
- JDBC-Transaction
- 初学CSS-2-文本的属性
- 使用zip.js压缩文件和解压文件
- item 1:理解template类型的推导
- Node+Express的跨域访问控制问题:Access-Control-Allow-Origin
- Terminal Service 终端链接
- 【题解】 Test 买水的ACX(套路)
- codeforces 853b//Jury Meeting// Codeforces Round #433 (Div. 1)
- 【令人振奋】【转】微软潘正磊谈DevOps、Visual Studio 2013新功能、.NET未来
- C#管理windows服务
- .NET:鲜为人知的 “Load Context”