Codeforces Round #788 (Div. 2)

Problem - 1670C - Codeforces

题意:给你abd三个数组,要求你恢复处c数组,问你c数组有多少种可能。对于限制如下。1.如果d[i] !=0, c[i] = d[i], 其他c[i] = {a[i], b[i]};

思路:我们可以将一个数对(a[i], b[i])建一条边, 因为当d[i] == 0时,这条边只能2选1上一个点,那么对于图的每一个连通分量,只要其中一个位置的取法确定了, 其他就都确定了。

下面考虑一些特殊情况, 1.d[i] != 0, 那么显然c[i]是恒定的, 对答案是没有贡献的,因为这个位置不会改变. 2.a[i] = b[i], 同理这样c[i]也是固定的,不会改变, 否则的话,我们只需要去统计连通块的个数, 然后每个连通块的贡献是2,用并查集维护出来即可!

#include<bits/stdc++.h>
using namespace std;#define x first
#define y second
#define endl '\n'
#define rep(i,a,n) for (int i = a; i < n; i ++ )
#define repn(i,a,n) for (int i = a; i <= n; i ++ )
#define pb push_back
#define IOS ios::sync_with_stdio(false); cin.tie(0);cout.tie(0);
typedef long long ll;
typedef unsigned long long ull;
#define all(x) (x).begin(),(x).end()
typedef pair<int,int> PII;ll lowbit(ll x) { return x & (- x); }
ll gcd(ll a,ll b) { return b ? gcd(b,a % b) : a; }
const int mod = 1e9+7;
const int N = 200010;
int fa[N];
int n;
void init() {for (int i = 0; i <= n; i ++ ) fa[i] = i;
}int find(int x) {if(x == fa[x])  return x;fa[x] = find(fa[x]);return fa[x];
}void merge(int a, int b) {fa[find(a)] = find(b);
}void solve() {cin >> n;vector<array<int, 3>> arr(n);rep(i, 0, n)    cin >> arr[i][1];//arep(i, 0, n)    cin >> arr[i][2];//brep(i, 0, n)    cin >> arr[i][0];//dinit();for(auto [d, a, b]: arr)if(d != 0) merge(0, d);for(auto [d, a, b]: arr)if(a == b) merge(0, a);for(auto [_, a, b]: arr)merge(a, b);set<int> s;for (int i = 1; i <= n; i ++ ) {if(find(i) == find(0)) continue;s.insert(find(i));}ll ans = 1;for (int i = 1; i <= s.size(); i ++ ) ans *= 2, ans %= mod;cout << ans << endl;}int main(){IOS;int t;cin >> t;while(t -- ){solve();}return 0;
}

Where is the Pizza?相关推荐

  1. swift学习选pizza项目

    2019独角兽企业重金招聘Python工程师标准>>> 原文: https://makeapppie.com/2014/09/18/swift-swift-implementing- ...

  2. UVA10079 Pizza Cutting

    问题链接:UVA10079 Pizza Cutting. 问题描述:参见上述链接. 问题分析:参考<具体数学>一书.也可以参考:直线分平面公式_百度百科. 程序说明:(略). AC的C++ ...

  3. GETZ PIZZA – Home Delivery Management

    GETZ PIZZA is a known pizza parlor批萨店 in the city. Looking at the increasing demand at workplaces an ...

  4. Xtreme9.0 - Mr. Pippo's Pizza 数学

    Mr. Pippo's Pizza 题目连接: https://www.hackerrank.com/contests/ieeextreme-challenges/challenges/mr-pipp ...

  5. XMAN【我真的好菜-同pizza师傅修炼笔记四】hackcon-app.exe

    前言 我好菜啊!真的没人看电影么?我请客!? Again!有小姐姐一起看电影的么?! hhhh- 分析 首先是个windows程序,PE32+尝试运行报缺少dll,百度一下发现是用minGW编译的,于 ...

  6. LeetCode每日一题(1444. Number of Ways of Cutting a Pizza)

    Given a rectangular pizza represented as a rows x cols matrix containing the following characters: ' ...

  7. 案例分析| 传统Pizza品牌通过转型两年内销量增长13.9%

    案例背景 传统企业市场失利兼外部挑战亟需转型升级 Domino's Pizza(达美乐)成立于1960年,是全球知名的连锁披萨品牌.近十多年来,它一直致力转型为一家 "会制作比萨的科技公司& ...

  8. 确保批萨质量平均 达美乐引入DOM Pizza Checker

    曾经打开披萨盒子却发现哪里出了问题吗?为了确保客户收到的披萨质量,跨国知名连锁披萨外送业者达美乐(Domino's)近日宣布推出全新的披萨检查系统「DOM Pizza Checker」,未来出炉的披萨 ...

  9. Pizza Separation(分比萨)

    Pizza Separation 问题链接 连续圆角分配,将一个圆盘(360°)分成两部分(每部分包含几块),并力求两部分角度最小: 两部分差值要求最小,一个为180° 解法: 处理分开的块(圆角), ...

  10. Pizza Day丨跟本仔念:我!要!吃!披!萨!

    哇哦~又到了一年一度的 Pizza Day. 十年前的今天,程序员 Laszlo 用 10000 枚比特币购买了 2 个披萨,先不说 10000 枚比特币现在价值几何,烤仔只知道每个节日都有好吃的,想 ...

最新文章

  1. python【力扣LeetCode算法题库】11-盛最多水的容器
  2. 计算bom的准确用量
  3. SAP WebIDE里的JavaScript代码检查code check
  4. 165. 比较版本号
  5. spring-boot 一款无侵入型,轻量级的接口文档生成工具apiggs
  6. 如何学习c语言 零基础20天学会C语言
  7. 【金融工程实验】【matlab】使用candle函数画日均k线图
  8. python爬虫从入门到放弃-python爬虫从入门到放弃(七)之 PyQuery库的使用
  9. php和python-php与python谁更适合web开发?为什么?
  10. eclipse没有java web,Java-我的Eclipse IDE中缺少Web服务选项
  11. 三十三个免费匿名临时邮箱服务
  12. 【毕业设计】深度学习疲劳检测 驾驶行为检测 - python opencv cnn
  13. 神舟战神z7-ct7nt的键盘灯控制不了的解决
  14. 使用Rsync+cwRsync实现数据异机备份+异地备份
  15. PCB十六大可靠性测试,看看您的板是否经得起测试?
  16. python职业发展规划-马哥教育官网-专业Linux培训班,Python培训机构
  17. 阿里云ACP如何线上考试
  18. Android 设计模式之二:MVP模式与MVC模式 .
  19. 如何制作朋友圈搞笑证件图片(附源码实例)
  20. js实现夜空 干货比较多

热门文章

  1. R项目:使用R分析人力资源数据
  2. 目标检测Tensorflow:Yolo v3代码详解 (2)
  3. POI 单元格垂直居中,相同内容的单元格合并
  4. 我要寄件 网上寄件
  5. 经典ps教程600例 打造ps高手
  6. XML解析之DOM、SAX、JAXP、DOM4J
  7. c#中屏蔽窗体关闭的消息
  8. 八边形Octagan类(接口) (5 分)
  9. Hibernate 关联关系解除
  10. Elasticsearch安装操作步骤