/*
HDU 6073 - Matching In Multiplication [ 图论 ] | 2017 Multi-University Training Contest 4
题意:
定义一张二分图,U中每个节点和V中两个节点连边
完美匹配的权值为该匹配所有边的权值相乘
求所有完美匹配的权值之和
分析:
可以发现有些V中的点只能连唯一的U中的点
按拓扑排序思路将这些全部处理掉后,剩下的点构成一个个环
每个环有两种连线方式,间隔取边权
*/
#include <bits/stdc++.h>
using namespace std;
#define LL long long
const int N = 600005;
const LL MOD = 998244353;
struct Edge {
int v; LL w;
};
vector<Edge> G[N];
int vis[N];
int cnt[N];
int t, n;
LL ans;
queue<int> que;
LL s[2];
void dfs(int x, int pre, int p)
{
if (vis[x]) return;
vis[x] = 2;
for (const auto & e : G[x])
{
if (vis[e.v] == 1 || e.v == pre) continue;
s[p] = s[p] * e.w % MOD;
dfs(e.v, x, p^1);
break;
}
}
void solve()
{
for (int i = n+1; i <= 2*n; i++)
if (G[i].size() == 1) que.push(i);
ans = 1;
while (!que.empty())
{
int y = que.front(); que.pop();
vis[y] = 1;
for (const auto& e: G[y])
{
if (!vis[e.v])
{
vis[e.v] = 1;
ans = ans * e.w % MOD;
for (const auto & ee: G[e.v])
{
if (vis[ee.v]) continue;
cnt[ee.v]--;
if (cnt[ee.v] == 1) que.push(ee.v);
}
}
}
}
for (int i = 1; i <= n; i++)
{
if (!vis[i])
{
s[0] = s[1] = 1;
dfs(i, i, 0);
ans = ans * (s[0] + s[1]) % MOD;
}
}
}
void init(int n)
{
for (int i = 0; i <= n; i++) G[i].clear();
while (!que.empty()) que.pop();
memset(vis, 0, sizeof(vis));
memset(cnt, 0, sizeof(cnt));
}
int main()
{
scanf("%d", &t);
while (t--)
{
scanf("%d", &n);
init(n<<1);
for (int i = 1; i <= n; i++)
{
int v; LL w;
scanf("%d%lld", &v, &w); v += n;
G[i].push_back(Edge{v, w});
G[v].push_back(Edge{i, w});
cnt[v]++;
scanf("%d%lld", &v, &w); v += n;
G[i].push_back(Edge{v, w});
G[v].push_back(Edge{i, w});
cnt[v]++;
}
solve();
printf("%lld\n", ans);
}
}

  

最新文章

  1. [LeetCode] Burst Balloons 打气球游戏
  2. Android开发-之数据的存储方式一
  3. 虚拟机VMWARE上ORACLE License 的计算
  4. [UCSD白板题] The Last Digit of a Large Fibonacci Number
  5. C++面向对象基础知识
  6. Windows 数据类型
  7. LINQ TO ENTITY 根据Birthday获取Age
  8. CSS3_新特性预览
  9. ASP.NET MVC自定义路由 - 实现IRouteConstraint限制控制器名(转载)
  10. html-----002
  11. ie6与固定定位fixed,+ 条件注释格式注意
  12. hdu 1232 畅通project
  13. JS事件流(W3C与IE区别)
  14. jQuery使用简单示例 validate 插件
  15. css中的注意项,可能会帮助到大家哦!
  16. 网络不能上网但能ping通处理
  17. vs2015创建类时增加默认注释
  18. jQuery遍历—each()方法遍历对象和数组
  19. (栈)leetcode 946. Validate Stack Sequences
  20. 拓展 NLog 优雅的输送日志到 Logstash

热门文章

  1. [转帖]Linux环境变量设置方法总结 PATH、LD_LIBRARY_PATH
  2. 使用power designer,PL/SQL,cmd建立oracle数据库
  3. 在django中进行后台管理时插入外键数据时不显示值的问题
  4. Do Not Try This Problem(分块思想)
  5. Centos安装elasticsearch,php连接使用
  6. 爆long long处理方法
  7. ACM-ICPC 2017北京
  8. 阿里云Centos7 配置二级域名
  9. python+django学习二
  10. windows 安装K8s 简易教程