E - Little W and Contest
https://vjudge.net/contest/386223#problem/E
Little W has divided our club members into two role groups. The first group contains only readers who dedicate themselves to reading problems during contests, though sometimes they may also prepare drinking and food for the team. For the sake of measurement, we define the power of a reader as 11. The second part contains only coders who code and test programs all the time, and similarly, we define the power of a coder as 22.
Little W thinks it will be a tremendous disaster when a team has two readers because in that case, the total power of this team is less than 55 and thus it has a high risk to fail the contest. To avoid that, Little W thinks a new team must have at least two coders.
Additionally, Little W defines the relationship between club members with transitivity. That is, for every three members AA, BB, and CC, if AA is familiar with BB, and BB is familiar with CC, then AA will be familiar with CC through BB instantly. Based on the definition, it is forbidden for the team to have any two members familiar with each other.
At first, no member of our club is familiar with any other, and then Little W will repeatedly make an introduction between two members who are currently strangers to each other until each member is familiar with all the others. During this process, there will be exactly (n−1)(n−1) introductions.
Now, for i=1,2,…,ni=1,2,…,n, Little W wants you to count the combinations of three club members that can form a new team after the first (i−1)(i−1) introductions have been made. However, the numbers of combinations may be quite gigantic, so you just need to report each number in modulo (109+7)(109+7).
InputThere are several test cases.
The first line contains an integer TT (1≤T≤101≤T≤10), denoting the number of test cases. Then follow all the test cases.
For each test case, the first line contains an integer nn (1≤n≤105)(1≤n≤105), denoting the number of members in this club.
The second line contains nn integers consisting of only 11 and 22, where the ii-th integer represents the power of the ii-th member.
The next (n−1)(n−1) lines describe all introductions in chronological order of occurrence, where each line contains two integers uu and vv (1≤u,v≤n,u≠v)(1≤u,v≤n,u≠v), representing an introduction between the uu-th member and the vv-th member, who are currently strangers to each other.
It is guaranteed that the sum of nn is no larger than 106106.
OutputFor each test case, output nn lines, where the ii-th line contains an integer, denoting the number of combinations of three club members, in modulo (109+7)(109+7), that can form a new team after the first (i−1)(i−1) introductions have been made.
Sample Input
1
5
2 2 2 1 1
4 5
1 4
2 1
3 2
Sample Output
7
7
3
0
0
Sponsor
题意:
n个人互不认识,经过一次介绍,两人认识,认识关系具有传递性,n-1次介绍后两联认识;
每个人都具有属性1或2,从n个人中选择三个人参加比赛,且至少有两个具有属性2,且三个人互不认识。
问每给一次介绍后有多少种凑出来一个队的组合
思路;
利用并查集,将所有的点分成三个部分(三种连通块),每次去不同块中取不满足的情况,
求出总的方案数
merge先计算贡献。合并集合产生四种情况
去合并的负贡献:每次用前一次的减去不满足的情况个数,得到结果。
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<bitset>
#include<cassert>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<deque>
#include<iomanip>
#include<list>
#include<map>
#include<queue>
#include<set>
#include<stack>
#include<vector>
#include <vector>
#include <iterator>
#include <utility>
#include <sstream>
#include <limits>
#include <numeric>
#include <functional>
using namespace std;
#define gc getchar()
#define mem(a) memset(a,0,sizeof(a))
//#define sort(a,n,int) sort(a,a+n,less<int>()) #define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair<int,int> pii;
typedef char ch;
typedef double db; const double PI=acos(-1.0);
const double eps=1e-6;
const int inf=0x3f3f3f3f;
const int maxn=1e5+10;
const int maxm=100+10;
const int N=2e5+10;
const int mod=1e9+7;
ll n = 0;
ll p[100005] = {0};
ll p1[100005] = {0};
ll p2[100005] = {0};
ll In, K;
ll temp;
ll ans;
ll x, y, k = 0;
ll inv(ll a)
{
return a == 1 ? 1 : (ll)(mod-mod/a)*inv(mod%a)%mod;
}
ll comb(ll n,ll m)
{
if(m < 0)return 0;
if(n < m)return 0;
if(m > n-m) m = n-m;
ll up = 1;
ll down = 1;
for(ll i = 0;i<m;i++)
{
up = up * (n-i) % mod;
down = down * (i+1) % mod;
}
return up*inv(down) %mod;
}
ll find(ll x)
{
if(x != p[x])
return p[x] = find(p[x]);
return x;
} void merge(ll x, ll y)
{
x = find(x);
y = find(y);
p1[y] += p1[x];
p2[y] += p2[x];
p[x] = y;
}
int main()
{
int T = 0;
cin >> T;
while(T--)
{
cin >> n;
In = 0;
K = 0;
for(ll i = 1;i<=n;i++)
{
p[i] = i;
cin >> temp;
if(temp == 1)
{
In += 1;
p1[i] = 1;
p2[i] = 0;
}
else
{
K += 1;
p1[i] = 0;
p2[i] = 1;
}
}
ans = (In*comb(K, 2)%mod + comb(K, 3))%mod; cout << ans <<endl;
for(int i = 1;i<=n-1;i++)
{
k = 0;
cin >> x >> y;
x = find(x);
y = find(y);
k = (k + p2[x]*p2[y] * (In- p1[x]- p1[y]))%mod;
k = (k + p2[x]*p2[y] * (In- p2[x]- p2[y]))%mod;
k = (k + p1[x]*p2[y] * (In- p2[x]- p2[y]))%mod;
k = (k + p2[x]*p1[y] * (In- p2[x]- p2[y]))%mod;
merge(x, y);
ans += mod - k;
ans %= mod;
cout << ans << endl;
}
}
}
E - Little W and Contest的更多相关文章
- 2020HDU多校第三场 1005 Little W and Contest
Little W and Contest Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/O ...
- hdu 6795 Little W and Contest 并查集+排列组合
题意: t组输入,有n个人,刚开始谁也不认识谁.每一个人有一个权值w[i](1<=w[i]<=2),你要挑选3个互相不认识的人组成一个队,且要保证3个人权值之和大于等于5(也就意味着最少要 ...
- lucene入门创建索引——(二)
1.程序宏观结构图
- hdu-5988 Coding Contest(费用流)
题目链接: Coding Contest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Ot ...
- ZOJ 3703 Happy Programming Contest
偏方记录背包里的物品.....每个背包的价值+0.01 Happy Programming Contest Time Limit: 2 Seconds Memory Limit: 65536 ...
- 校际联合Contest
每次开一个坑都像是重新被碾压的预感 最近的新闻,以前很喜欢乔任梁的<复活>...然后他就死了...感觉我再多愁善感一点的话...就要悲伤逆流成河了吧... Contest 09/24(乐滋 ...
- 2016 Multi-University Training Contest 1
8/11 2016 Multi-University Training Contest 1 官方题解 老年选手历险记 最小生成树+线性期望 A Abandoned country(BH) 题意: 1. ...
- 2016 Multi-University Training Contest 2
8/13 2016 Multi-University Training Contest 2官方题解 数学 A Acperience(CYD)题意: 给定一个向量,求他减去一个 α(>=0)乘以 ...
- 2016 Multi-University Training Contest 3
5/11 2016 Multi-University Training Contest 3官方题解 2016年多校训练第三场 老年选手历险记 暴力 A Sqrt Bo(CYD) 题意:问进行多少次开根 ...
- 2016 Multi-University Training Contest 4
6/12 2016 Multi-University Training Contest 4官方题解 KMP+DP A Another Meaning(CYD) 题意: 给一段字符,同时给定你一个单词, ...
随机推荐
- Git 查看 tag 标签详解
摘要:介绍git中tag标签的使用方法,包括创建标签.提交标签.查询标签和删除标签等. 我们拿到一个即将投产的标签后,需要确认标签是否打在了正确的分支,故需要查看标签的详情信息,保证顺利上线.基于此背 ...
- 以RRT为例分析创新点的产生
1.找到基本算法的问题 1.1 喂文章和专利给GPT并分析提出的问题 1.2 整理问题 分析当前问题属于基本算法的那个阶段 2.1 固定参数问题:以双向RRT为例子:步长.采样方向.局部优化范围.交换 ...
- GC-QA-RAG 智能问答系统的向量检索
本章节介绍 GC-QA-RAG 智能问答系统的核心检索技术原理,包括向量化策略.混合检索机制.RRF 融合排序等关键实现细节. 1. 检索流程概述 系统采用典型的 RAG(Retrieval-Augm ...
- 【中英】【吴恩达课后测验】Course 5 -序列模型 - 第二周测验 - 自然语言处理与词嵌入
[中英][吴恩达课后测验]Course 5 -序列模型 - 第二周测验 - 自然语言处理与词嵌入 上一篇:[课程5 - 第一周编程作业]※※※※※ [回到目录]※※※※※下一篇:[课程5 -第二周编程 ...
- 使用Git修改文件名字的大小写
问题背景 最近发现window对文件名的大小写不敏感,如果想把文件夹start,修改成Start,让git有变化. 应该怎么做呢,直接看黑框操作步骤 解决方案 第一步:将文件(夹)更改大小写 $ mv ...
- ceph集群故障运维--持续更新
一.PG处于异常状态active+undersized+degraded 部署环境: 自己搭建的3节点集群,集群共5个OSD,部署Ceph的RadosGW的服务时,副本默认设置为3,集群存放数据量少. ...
- 微服务架构学习与思考(16):SOA架构与微服务架构对比分析?它们之间区别是什么?
什么是 SOA 架构 SOA(Service-Oriented Architecture) 架构是面向服务的架构,是一种将单体应用粗粒度的划分为服务的架构,其核心是将业务功能抽象为独立.可重用.松耦合 ...
- Eplan是什么软件?学习Eplan软件的几个关键要点
EPLAN是一款电气计算机辅助设计软件.我是一名Eplan软件的学习者,最近在学习这个专业的电气设计软件时,总结了一些关键要点,希望能与大家分享. 1. 熟悉软件界面和功能:首先,我们需要熟悉Epla ...
- Java源码分析系列笔记-14.ThreadPool
目录 1. 是什么 2. 如何使用 3. 原理分析 3.1. uml 3.2. 构造方法 3.3. set方法 3.3.1. 先获取Thread对应的ThreadLocalMap 3.3.2. 有的话 ...
- Spring AI 玩转多轮对话
AI "失忆"怎么办?本文带你用 Spring AI 一招搞定多轮对话,让你的 AI 应用拥有超强记忆!从 ChatClient.Advisors 到实战编码,三步打造一个能记住上 ...