1001 Minimum’s Revenge

点的编号从 1 到 n ,u  v 的边权是 LCM(u,v) ,求这个图的最下生成树

搞成一颗以 1 为 根 的菊花树

------------------------------------

比赛的时候看过的人好少,都没有看这道题

 #include <cstdio>
#include <cstring>
#include <cstring>
#include <algorithm>
using namespace std; typedef long long LL;
LL n; int main(){
int T,kase = ;
scanf("%d",&T);
while(T--){
scanf("%I64d",&n);
LL ans = n*(n+)/2LL - 1LL;
printf("Case #%d: %I64d\n",++kase,ans);
}
return ;
}

1002 Prediction

1003 Mr. Frog’s Problem

1004 Coconuts

把坐标离散化之后,再dfs下连通块

----------------------------------------

自己想的时候,是想去直接算坏点包围起来的好的点...但是这样好麻烦..应该直接就dfs好的点

然后就是 坐标的离散化也没有写过..

最后忘记给答案排序..从早上wa 到现在...TAT

 #include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
using namespace std; const int maxn = ;
typedef long long LL;
int x[maxn],y[maxn],xx[maxn],yy[maxn],vis[maxn][maxn];
int lix[maxn],liy[maxn],totx,toty,cx,cy;
int n,m,k;
LL cnt;
int dx[] = {,-,,};
int dy[] = {,,,-}; map<int,int> X,Y; int ok(int x,int y){
return x >= && x <= cx && y >= && y <= cy;
} void dfs(int x,int y){
vis[x][y] = ;
cnt += 1LL*xx[x] * yy[y];
for(int i = ;i < ;i++){
int nx = x + dx[i];
int ny = y + dy[i];
if(!ok(nx,ny) || vis[nx][ny]) continue;
dfs(nx,ny);
}
} void solve(){
memset(vis,,sizeof(vis));
for(int i = ;i <= k;i++){
int u = X[x[i]];
int v = Y[y[i]];
vis[u][v] = ;
} vector<LL> ans;
for(int i = ;i <= cx;i++){
for(int j = ;j <= cy;j++){
if(vis[i][j]) continue;
cnt = 0LL;
// printf("i = %d j = %d \n",i,j);
dfs(i,j);
ans.push_back(cnt);
}
}
int sz = ans.size();
printf("%d\n",sz);
if(sz == ) return;
sort(ans.begin(),ans.end());
for(int i = ;i < sz-;i++) printf("%lld ",ans[i]);
printf("%lld\n",ans[sz-]);
} int main(){
int T,kase = ;
scanf("%d",&T);
while(T--){
scanf("%d %d %d",&n,&m,&k);
totx = toty = ;
lix[++totx] = liy[++toty] = ;
lix[++totx] = m;liy[++toty] = n;
for(int i = ;i <= k;i++){
scanf("%d %d",&y[i],&x[i]);
lix[++totx] = x[i];
liy[++toty] = y[i];
}
sort(lix+,lix+totx+);
totx = unique(lix+,lix+totx+) - (lix+);
sort(liy+,liy+toty+);
toty = unique(liy+,liy+toty+) - (liy+); X.clear();Y.clear();
cx = ,cy = ;
for(int i = ;i <= totx;i++){
if(lix[i] != lix[i-]+) xx[++cx] = lix[i] - lix[i-] - ;
xx[++cx] = ;
X[lix[i]] = cx;
}
for(int i = ;i <= toty;i++){
if(liy[i] != liy[i-]+) yy[++cy] = liy[i] - liy[i-] - ;
yy[++cy] = ;
Y[liy[i]] = cy;
} printf("Case #%d:\n",++kase);
solve();
}
return ;
}

1005 Mr. Frog’s Game

1006 Auxiliary Set

给出一颗树, q 个询问,每个询问给出  m 个非重要的点

询问的答案 是 重要的点的个数,重要的点有两种,一种 是 本来就是重要的点,另一种是两个重要的点的 lca

按照深度排序,排序之后,每次就可以扫一遍 这 m 个点,看当前点的儿子,如果有大于等于2个儿子是重要或者被标记的,就可以了

---------------------------------------------

忘记memset vis  一直一直一直 wa

感觉自己写代码老是很粗心。。

 #include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std; const int maxn = 2e5+;
int n,m,k;
vector<int> g[maxn];
int a[maxn],b[maxn],fa[maxn],vis[maxn],dep[maxn],ans[maxn]; int col,num; struct node{
int x;
int d;
}p[maxn]; int cmp(node n1,node n2){
return n1.d > n2.d;
} Dfs(int u,int pre,int d){
fa[u] = pre;
dep[u] = d;
for(int i = ;i < g[u].size();i++){
int v = g[u][i];
if(v == pre) continue;
fa[v] = u;
Dfs(v,u,d+);
}
} int kase; void solve(){
memset(fa,,sizeof(fa));
memset(dep,,sizeof(dep));
memset(a,,sizeof(a));
memset(vis,,sizeof(vis));
Dfs(,,);
for(int i = ;i <= m;i++){
col = i;
scanf("%d",&k);
int x;
for(int j = ;j <= k;j++){
scanf("%d",&x);
p[j].x = x;
p[j].d = dep[x];
a[x] = col;
}
sort(p+,p+k+,cmp);
int res = n-k;
for(int j = ;j <= k;j++){
int u = p[j].x;
int cc = ;
for(int z = ;z < g[u].size();z++){
int v = g[u][z];
if(v == fa[u]) continue;
if(a[v] != col || vis[v] == col){
vis[v] = vis[u] = col;
cc++;
}
if(cc >= ) break;
}
if(cc >= ) res++;
}
ans[i]= res;
//printf("res = %d\n",res);
}
printf("Case #%d:\n",++kase);
for(int i = ;i <= m;i++) printf("%d\n",ans[i]);
} int main(){
int T;
scanf("%d",&T);
kase = ;
while(T--){
scanf("%d %d",&n,&m);
int u, v;
for(int i = ;i <= n;i++) g[i].clear();
for(int i = ;i < n;i++){
scanf("%d %d",&u,&v);
g[u].push_back(v);
g[v].push_back(u);
}
solve();
}
return ;
}

1007 Birthday Gift

1008 Basic Data Structure

1009 GCD

1010 Mission Possible

1011 Backpack on Tree

10.6 CCPC northeast的更多相关文章

  1. CCPC、Petrozavodsk Camp、OpenCup 题解汇总

    省赛 \([\text{2021.11.30}]\) 2021 Jilin Collegiate Programming Contest 全部完成. \([\text{2021.12.25}]\) 2 ...

  2. Ubuntu 14.10 下grep命令详解

    简介 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它 ...

  3. CCPC总结

    [印象·南阳] 10月15日出发,威海—烟台—郑州—南阳,一路上欢声笑语,从谁是卧底到各类纸牌游戏,也是欢乐.在从郑州到南阳的车上,对面的好像是河南当地的学长,感叹道工作不易的样子,说还是学生时代最为 ...

  4. 2017 CCPC Qinhuangdao Site

    A. Balloon Robot 假设机器人$0$时刻位于$0$号位置,那么每个气球所需的时间为$(s_a-b)\bmod m$. 将所有气球按这个时间排序,枚举每个气球的时间作为偏移量,得出最优解即 ...

  5. 2018.10.25 CCSP马拉松摸铜归来

    24号体测跑50+1000米. 50米抢跑被罚重跑???然后老年人就只能吊着一口仙气跑第二次50米.然后跑1000米,然后再到宿舍收拾行李赶往地铁站,然后再冲到火车站...(卒) 宾馆,三人挤入二人房 ...

  6. 2017 ccpc哈尔滨 A题 Palindrome

    2017 ccpc哈尔滨 A题 Palindrome 题意: 给一个串\(T\),计算存在多少子串S满足\(S[i]=S[2n−i]=S[2n+i−2](1≤i≤n)\) 思路: 很明显这里的回文串长 ...

  7. 2018 CCPC 桂林游记

    TYPE: Onsite Contest NAME: 2018 - CCPC - Guilin PLAT: HUSTOJ TIME: 2018/10/28 09:00-14:00 CST LOCA: ...

  8. ccpc 网络赛 hdu 6155

    # ccpc 网络赛 hdu 6155(矩阵乘法 + 线段树) 题意: 给出 01 串,要么询问某个区间内不同的 01 子序列数量,要么把区间翻转. 叉姐的题解: 先考虑怎么算 \(s_1, s_2, ...

  9. HDU 6271 Master of Connected Component(2017 CCPC 杭州 H题,树分块 + 并查集的撤销)

    题目链接  2017 CCPC Hangzhou Problem H 思路:对树进行分块.把第一棵树分成$\sqrt{n}$块,第二棵树也分成$\sqrt{n}$块.    分块的时候满足每个块是一个 ...

随机推荐

  1. 接触Matlab5年一个总结(Matlab要掌握的一些要点 )

    阅读目录 前言 Matlab的开发环境与简单介绍 Matlab的常见命令 Matlab的灵魂-矩阵操作 Matlab的.m或.fig的编程与技巧 从大二开始接触到matlab,讲真,这是一个我觉得很良 ...

  2. 使用CSS3的background-size优化Sprites图显示

    当我的Sprites图像是300px,如何指定background-size为32px呢?其实不难,只需要一点点数学计算,这是一个很初级的过程. 在我们的实例中,我们使用媒体社交图标.我想让他们都按1 ...

  3. 传感器介绍之DHT11

    一.DHT11介绍 DHT11 数字温湿度传感器,如图所示,是一款含有已校准数字信号输出的温湿度复合传感器.它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性.传 ...

  4. 《利用python进行数据分析》读书笔记--第四章 numpy基础:数组和矢量计算

    http://www.cnblogs.com/batteryhp/p/5000104.html 第四章 Numpy基础:数组和矢量计算 第一部分:numpy的ndarray:一种多维数组对象 实话说, ...

  5. 数组类型与sizeof与指针的引用

    以char类型为例: char a[100];     //a类型为char[100]    &a类型为 char (*)[100]    *a类型为char char *p = a;     ...

  6. Java 网络编程学习总结

    新手一枚,Java学习中,把自己学习网络编程的知识总结一下,梳理下知识,方便日后查阅,高手莫进. 本文的主要内容: [1]    网络编程认识                [2]  TCP/IP编程 ...

  7. mysql 查询表,视图,触发器,函数,存储过程

    1. mysql查询所有表: SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '数据库名' AND  TAB ...

  8. js对象/数组深度复制

    今天碰到个问题,js对象.数组深度复制:之前有见过类似的,不过没有实现函数复制,今晚想了一下,实现代码如下: function clone(obj) { var a; if(obj instanceo ...

  9. php变量赋值给js

    1 2 3 4 5 6 7 8 $(document).ready(function(){                 <?php $f="'name'"?>    ...

  10. Oracle数据库体系结构、启动过程、关闭过程

    一.Oracle数据库体系结构体系结构由下面组件组成:1.Oracle服务器(Server):由数据库实例和数据库文件组成,另外在用户建立与服务器的连接时启动服务器进程并分配PGA(程序全局区) (1 ...