SenseTime Ace Coder Challenge 暨 商汤在线编程挑战赛*
题目链接 Problems
Problem A
Problem B
bitset……
Problem C
Problem D
Problem E
Problem F
Problem G
考虑最小生成树的时候,
合并两个点的时候就新建一个点,把这两个点都指向新的那个点。
然后给这两个点都打上delta标记。
最后dfs这棵新的树就好了。
#include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i(a); i <= (b); ++i)
#define dec(i, a, b) for (int i(a); i >= (b); --i)
#define fi first
#define se second typedef unsigned long long LL; const int N = 4e5 + 10;
const int M = 3e5 + 10; struct node{
int x, y;
LL z;
friend bool operator < (const node &a, const node &b){
return a.z < b.z;
}
} e[M]; int T;
int n, m;
int father[N];
int id;
int ca = 0; LL sz[N];
LL delta[N];
LL ans[N];
vector <int> v[N]; int getfather(int x){
return father[x] == x ? x : father[x] = getfather(father[x]);
} void dfs(int x, LL ss){
if (x <= n) ans[x] = ss; for (auto u : v[x]){
dfs(u, ss + delta[u]);
}
} int main(){ scanf("%d", &T);
while (T--){
scanf("%d%d", &n, &m);
rep(i, 1, n) father[i] = i; rep(i, 0, n * 3) sz[i] = 0, delta[i] = 0;
rep(i, 1, n) sz[i] = 1;
rep(i, 0, n * 3) v[i].clear(); rep(i, 1, m){
scanf("%d%d%llu", &e[i].x, &e[i].y, &e[i].z);
} id = n;
sort(e + 1, e + m + 1); rep(i, 0, n * 2) ans[i] = 0; rep(i, 1, m){
int x = e[i].x, y = e[i].y;
LL z = e[i].z; int fx = getfather(x), fy = getfather(y); if (fx == fy) continue; ++id;
v[id].push_back(fx);
v[id].push_back(fy);
sz[id] = sz[fx] + sz[fy];
father[fx] = id;
father[fy] = id;
father[id] = id;
delta[fx] = z * sz[fy];
delta[fy] = z * sz[fx];
} dfs(id, 0); LL ret = 0;
rep(i, 1, n) ret ^= ((LL)i * ans[i]);
printf("Case #%d: %llu\n", ++ca, ret); } return 0;
}
SenseTime Ace Coder Challenge 暨 商汤在线编程挑战赛*的更多相关文章
- SenseTime Ace Coder Challenge 暨 商汤在线编程挑战赛 A. 地铁站
//其实比赛的时候就想到这方法了,但看到数据太吓人,就没写//看着标程,实际上就是这方法,太坑爹…… /* 假设值为k,对于图中任意两点,圆1半径k/t1,圆2半径k/t2 圆1与圆2的交集为可以设置 ...
- SenseTime Ace Coder Challenge 暨 商汤在线编程挑战赛 D. 白色相簿
从某一点开始,以层次遍历的方式建树若三点a.b.c互相连接,首先必先经过其中一点a,然后a可以拓展b.c两点,b.c两点的高度是相同的,若b(c)拓展时找到高度与之相同的点,则存在三点互相连接 //等 ...
- SenseTime Ace Coder Challenge 暨 商汤在线编程挑战赛 E. 疯狂计数
1.改高精度 :float/double的精度为x位,小数部分最多x+x位(乘法和加法),整数部分<1000000*1000000/2=5 * 10^11 2.分成整数部分和小数部分分别存储,貌 ...
- 商汤科技汤晓鸥:其实不存在AI行业,唯一存在的是“AI+“行业
https://mp.weixin.qq.com/s/bU-TFh8lBAF5L0JrWEGgUQ 9 月 17 日,2018 世界人工智能大会在上海召开,在上午主论坛大会上,商汤科技联合创始人汤晓鸥 ...
- 2019 计蒜之道 初赛 第一场 商汤AI园区的n个路口(中等) (树形dp)
北京市商汤科技开发有限公司建立了新的 AI 人工智能产业园,这个产业园区里有 nn 个路口,由 n - 1n−1 条道路连通.第 ii 条道路连接路口 u_iui 和 v_ivi. 每个路口都布有 ...
- 旷视向左、商汤向右,AI一哥之名将落谁家
编辑 | 于斌 出品 | 于见(mpyujian) AI风口历经多年洗礼之后,真正意义上的AI第一股终于要来了. 相比于聚焦在语音识别技术上的科大讯飞.立足互联网产业的百度.发力人形机器人领域的优必选 ...
- 计蒜客 第四场 C 商汤科技的行人检测(中等)平面几何好题
商汤科技近日推出的 SenseVideo 能够对视频监控中的对象进行识别与分析,包括行人检测等.在行人检测问题中,最重要的就是对行人移动的检测.由于往往是在视频监控数据中检测行人,我们将图像上的行人抽 ...
- 算法与数据结构(2)--英雄会第三届在线编程大赛:几个bing
基础知识的回顾不再写到这里面了,会写一些算法算法的解答或者读一些相关书籍的笔记. 今天做了一道算法题,来自微软必应·英雄会第三届在线编程大赛:几个bing? 做出来了...但不知道为啥执行测试用例失败 ...
- csdn在线编程里面的一个排列组合题
是csdn在线编程里面的一个问题 回文字符串是指从左到右和从右到左相同的字符串,现给定一个仅由小写字母组成的字符串,你可以把它的字母重新排列,以形成不同的回文字符串. 输入:非空仅由小写字母组成的字符 ...
随机推荐
- 【The VC Dimension】林轩田机器学习基石
首先回顾上节课末尾引出来的VC Bound概念,对于机器学习来说,VC dimension理论到底有啥用. 三点: 1. 如果有Break Point证明是一个好的假设集合 2. 如果N足够大,那么E ...
- http客户端缓存
这篇文章写得比较,点击查看
- Python 高级 I/O 多路复用
Table of Contents 前言 select selectors 结语 参考链接 前言 第一次接触和 I/O 多路复用相关的概念是在书 CSAPP1 的并发编程章节,当时在了解了这个概念后只 ...
- c# asp.net 中使用token验证
基于token的鉴权机制类似于http协议也是无状态的,它不需要在服务端去保留用户的认证信息或者会话信息.这就意味着基于token认证机制的应用不需要去考虑用户在哪一台服务器登录了,这就为应用的扩展提 ...
- HDU 4057 Rescue the Rabbit ( AC自动机 + 状态压缩DP )
模板来自notonlysuccess. 模式串只有10个,并且重复出现的分值不累加,因此很容易想到状态压缩. 将模式串加入AC自动机,最多有10*100个状态. dp[i][j][k]:串长为i,在T ...
- PHP7 深入理解
读 PHP7的内核剖析 php7-internal 记录 3 PHP的相关组成 3.1 SAPI php常见的四种运行模式 SAPI:Server Application Programming In ...
- Sth about 函数式编程(Functional Programming)
今天开会提到了函数式编程,针对不同类型的百年城方式,查阅了一部分资料,展示如下: 编程语言一直到近代,从汇编到C到Java,都是站在计算机的角度,考虑CPU的运行模式和运行效率,以求通过设计一个高效的 ...
- JS DOM对象与jQuery对象的转换
JS转jQuery // 直接用$()来包裹 如同$(this) $(document) var jsObj = document.getElementById('test'); var jquery ...
- let与const区别
let 1. let有变量提升,但是有约束 2. 会形成暂时性死区(TDZ) 3. 同一个块级作用域内不允许声明相同变量 4. 块级变量 5. let声明的全局变量不是全局对象的属性,var会 6. ...
- 《c程序设计语言》-3.2 字符串转换
#include <stdio.h> #define Num 1000 int main() { int i = 0,j,k,count2 = 0; char s[Num] = {'\0' ...