A. Rikka with Minimum Spanning Trees

题意:

给出一个图,求最小生成树的个数和权值

思路:

因为数据随机,只有一个MST

 #include <bits/stdc++.h>
using namespace std; #define ull unsigned long long
ull k1, k2;
const ull MOD = (ull)1e9 + ;
int t, n, m; ull f()
{
ull k3 = k1, k4 = k2;
k1 = k4;
k3 ^= k3 << ;
k2 = k3 ^ k4 ^ (k3 >> ) ^ (k4 >> );
return k2 + k4;
} struct Edge
{
int u, v; ull w;
Edge() {}
Edge(int u, int v, ull w) : u(u), v(v), w(w) {}
bool operator < (const Edge &other) const { return w < other.w; }
}edge[]; int fa[];
int find(int x) { return fa[x] == ? x : fa[x] = find(fa[x]); } void Kruskal()
{
memset(fa, , sizeof fa);
sort(edge + , edge + + m);
int cnt = ;
ull res = ;
for (int i = ; i <= m; ++i)
{
int u = edge[i].u, v = edge[i].v; ull w = edge[i].w;
// cout << i << " " << w << endl;
int fu = find(u), fv = find(v);
if (fu == fv) continue;
++cnt;
res = (res + w) % MOD;
fa[fu] = fv;
if (cnt == n) break;
}
if (cnt != n) res = ;
printf("%llu\n", res);
} int main()
{
scanf("%d", &t);
while (t--)
{
scanf("%d%d%llu%llu", &n, &m, &k1, &k2);
for (int i = ; i <= m; ++i)
{
edge[i].u = f() % n + ;
edge[i].v = f() % n + ;
edge[i].w = f();
// cout << edge[i].u << " " << edge[i].v << " " << edge[i].w << endl;
}
Kruskal();
}
return ;
}

G. Rikka with Intersections of Paths

题意:

给出一棵树,以及$m条简单路径,求从这些简单路径中选出k条,有多少种不同方式使得路径交至少为1$

思路:

枚举路径交的$LCA$, 对于一个点来说,它的贡献是,所有经过它的路径假设为$x$

那么有$C_x^k$ 但是对于一些路径的$LCA不是它,那么这些路径中选出k条的贡献肯定在他们所在的LCA处被计算$

所以应该被减去,也就是说假设经过它但是$LCA不是它的路径条数假设为y条$

那么需要减去$C_y^k$

最终贡献为$C_x^k - C_y^k$

 #include <bits/stdc++.h>
using namespace std; #define ll long long
#define N 300010
const ll MOD = (ll)1e9 + ;
int t, n, m, k;
vector <int> G[N]; int fa[N], deep[N], sze[N], son[N], top[N];
void DFS(int u)
{
sze[u] = ;
for (auto v : G[u]) if (v != fa[u])
{
fa[v] = u;
deep[v] = deep[u] + ;
DFS(v);
sze[u] += sze[v];
if (!son[u] || sze[v] > sze[son[u]]) son[u] = v;
}
} void getpos(int u, int sp)
{
top[u] = sp;
if (!son[u]) return;
getpos(son[u], sp);
for (auto v : G[u]) if (v != fa[u] && v != son[u])
getpos(v, v);
} int querylca(int u, int v)
{
while (top[u] != top[v])
{
if (deep[top[u]] < deep[top[v]]) swap(u, v);
u = fa[top[u]];
}
return deep[u] > deep[v] ? v : u;
} int cnt[N], tag[N];
void add(int u)
{
for (auto v : G[u]) if (v != fa[u])
{
add(v);
cnt[u] += cnt[v];
}
} ll fac[N], inv[N];
ll qmod(ll base, ll n)
{
ll res = ;
while (n)
{
if (n & ) res = (res * base) % MOD;
base = (base * base) % MOD;
n >>= ;
}
return res;
} void init()
{
fac[] = ;
for (int i = ; i <= ; ++i) fac[i] = (fac[i - ] * i) % MOD;
inv[] = qmod(fac[], MOD - );
for (int i = ; i >= ; --i) inv[i - ] = (inv[i] * i) % MOD;
} ll C(int n, int m)
{
if (m > n) return ;
return fac[n] * inv[m] % MOD * inv[n - m] % MOD;
} int main()
{
init();
scanf("%d", &t);
while (t--)
{
scanf("%d%d%d", &n, &m, &k);
for (int i = ; i <= n; ++i) G[i].clear(), son[i] = , cnt[i] = , tag[i] = ;
for (int i = , u, v; i <= n - ; ++i)
{
scanf("%d%d", &u, &v);
G[u].push_back(v);
G[v].push_back(u);
}
DFS(); getpos(, );
for (int i = , u, v; i <= m; ++i)
{
scanf("%d%d", &u, &v);
int lca = querylca(u, v);
++tag[lca];
++cnt[u];
++cnt[v];
--cnt[lca];
if (fa[lca]) --cnt[fa[lca]];
}
add();
ll res = ;
for (int i = ; i <= n; ++i) res = (res + C(cnt[i], k) - C(cnt[i] - tag[i], k) + MOD) % MOD;
printf("%lld\n", res);
}
return ;
}

2018-2019 ACM-ICPC, Asia Xuzhou Regional Contest Solution的更多相关文章

  1. ACM ICPC Central Europe Regional Contest 2013 Jagiellonian University Kraków

    ACM ICPC Central Europe Regional Contest 2013 Jagiellonian University Kraków Problem A: Rubik’s Rect ...

  2. 2019-2020 ICPC, Asia Jakarta Regional Contest (Online Mirror, ICPC Rules, Teams Preferred)

    2019-2020 ICPC, Asia Jakarta Regional Contest (Online Mirror, ICPC Rules, Teams Preferred) easy: ACE ...

  3. 2019 ICPC Asia Xuzhou Regional

    目录 Contest Info Solutions A. Cat B. Cats line up C. <3 numbers E. Multiply F. The Answer to the U ...

  4. 2018-2019, ICPC, Asia Yokohama Regional Contest 2018 K

    传送门:https://codeforces.com/gym/102082/attachments 题解: 代码: /** * ┏┓ ┏┓ * ┏┛┗━━━━━━━┛┗━━━┓ * ┃ ┃ * ┃ ━ ...

  5. 2018 ICPC Asia Jakarta Regional Contest

    题目传送门 题号 A B C D E F G H I J K L 状态 Ο . . Ο . . Ø Ø Ø Ø . Ο Ο:当场 Ø:已补 .  :  待补 A. Edit Distance Thin ...

  6. Gym - 101981K The 2018 ICPC Asia Nanjing Regional Contest K.Kangaroo Puzzle 暴力或随机

    题面 题意:给你1个20*20的格子图,有的是障碍有的是怪,你可以每次指定上下左右的方向,然后所有怪都会向那个方向走, 如果2个怪撞上了,就融合在一起,让你给不超过5w步,让所有怪都融合 题解:我们可 ...

  7. Gym - 101981M The 2018 ICPC Asia Nanjing Regional Contest M.Mediocre String Problem Manacher+扩增KMP

    题面 题意:给你2个串(长度1e6),在第一个串里找“s1s2s3”,第二个串里找“s4”,拼接后,是一个回文串,求方案数 题解:知道s1和s4回文,s2和s3回文,所以我们枚举s1的右端点,s1的长 ...

  8. Gym - 101981G The 2018 ICPC Asia Nanjing Regional Contest G.Pyramid 找规律

    题面 题意:数一个n阶三角形中,有多少个全等三角形,n<=1e9 题解:拿到题想找规律,手画开始一直数漏....,最后还是打了个表 (打表就是随便定个点为(0,0),然后(2,0),(4,0), ...

  9. Gym - 101981I The 2018 ICPC Asia Nanjing Regional Contest I.Magic Potion 最大流

    题面 题意:n个英雄,m个怪兽,第i个英雄可以打第i个集合里的一个怪兽,一个怪兽可以在多个集合里,有k瓶药水,每个英雄最多喝一次,可以多打一只怪兽,求最多打多少只 n,m,k<=500 题解:显 ...

随机推荐

  1. SDRAM容量的计算方法

    当我在看有关SDRAM的芯片手册的时候,我一直在想这样一个问题:SDRAM的容量它究竟是如何计算的呢?经过查找网上的各种资料,最后在这里给大伙分享一下我的总结! 就以我的开发板的SDRAM的芯片手册的 ...

  2. RegisterHotKey注册快捷键

    RegisterHotKey的具体使用方使用方法如下: BOOL   RegisterHotKey( HWND   hWnd,         //响应该热键的窗口句柄 Int   id,       ...

  3. 使用vim-pathogen 进行插件管理

    使用vim的插件管理器 pathogen进行vim的插件管理. 1. pathogen 管理插件 pathogen让每个插件占有一个单独的目录,解决了文件分散的问题.安装完 pathogen之后,只需 ...

  4. \r\n和\n的区别

    写Java代码的时候习惯用\r\n换行,这样可移植性比较好但是,在UVa - 160中就出现了错误,来看看是为什么吧. http://bbs.csdn.net/topics/220033879

  5. 从TCP三次握手说起--浅析TCP协议中的疑难杂症(1)

    版权声明:本文由黄日成原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/73 来源:腾云阁 https://www.qclou ...

  6. hdu4028 The time of a day[map优化dp]

    The time of a day Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others ...

  7. java中得到文件MIME类型的几种方法(转)

     本文转载自:http://hotsunshine.iteye.com/blog/857485 使用 javax.activation.MimetypesFileTypeMap 需要引入activat ...

  8. IOS中使用轻量级数据库

    IOS中使用轻量级数据库 目录 概述 IOS中的轻量级数据库 sqlite的方法 数据库的实用操作 第三方类库 FMDatabase 概述 IOS中的轻量级数据库 sqlite的方法 sqlite3 ...

  9. Android dialog 全屏

    Android中让Dialog全屏: 一.在style中定义样式: <?xml version="1.0" encoding="utf-8"?> & ...

  10. Swift - WebKit示例解读

    如果你曾经在你的App中使用UIWebView加载网页内容的话,你应该体会到了它的诸多不尽人意之处.UIWebView是基于移动版的Safari的,所以它的性能表现十分有限.特别是在对几乎每个Web应 ...