练习赛44

练习赛44

Begin: 2019-04-03 18:35

PDD:355rlb

A

Kefa and Park CodeForces 580C

标签:暴力dfs(55)

题目大意

? 一棵以1为根的树,树上有些点是红的。一个叶子是合法的当且仅当从根到它的路径上出现的连续红点个数不超过m。求有多少个叶子是合法的。

思路

直接搜索就可以了,注意细节。

CODE:

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
bool a[N];
vector<int>e[N];
int ans,n,m;
void dfs(int x,int d,int fa){
    for(int i=0;i<e[x].size();i++){
        int y=e[x][i];
        if(y==fa)continue;
        if(!a[y]){
            if(e[y].size()==1)ans++;
            dfs(y,0,x);
        }
        else if(d<m){
            if(e[y].size()==1)ans++;
            dfs(y,d+a[y],x);
        }
    }
}
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)scanf("%d",&a[i]);
    for(int i=1,u,v;i<n;i++){
        scanf("%d%d",&u,&v);
        e[u].push_back(v),e[v].push_back(u);
    }
    dfs(1,a[1],0);
    printf("%d",ans);
}

B

Kefa and Dishes CodeForces - 580D

标签:状压dp(75)

题目大意

? kefa进入了一家餐厅,这家餐厅中有n个菜(0<n≤18),kefa对第i个菜的满意度为ai(0≤ai≤10^9),并且对于这n个菜有k个规则,如果kefa在吃完第xi个菜之后吃了第yi个菜(保证xi、yi不相等),那么会额外获得ci(0≤ci≤10^9)的满意度。kefa要吃m道任意的菜(0<m≤n),但是他希望自己吃菜的顺序得到的满意度最大,请你帮帮kefa吧!

思路

基本操作都一样,dp包括两维:已经吃过的菜,刚刚吃过的菜。还有就是注意long long

CODE:

#include<bits/stdc++.h>
using namespace std;
const int N=20;
long long t[25][25],a[25],dp[1<<N][25];
long long ans;
int calc(int x){
    int res=0;
    for(int i=0;i<=19;i++){
        if(x&(1<<i))res++;
    }
    return res;
}
int main(){
    int n,m,k;
    memset(dp,-1,sizeof(dp));
    scanf("%d%d%d",&n,&m,&k);
    for(int i=0;i<n;i++){
        scanf("%lld",&a[i]);
        dp[1<<i][i]=a[i];
    }
    for(int i=1,u,v;i<=k;i++){
        long long d;
        scanf("%d%d%lld",&u,&v,&d);u--,v--;
        t[u][v]=d;
    }
    for(int i=0;i<(1<<n);i++){
        int cnt=calc(i);
        bool ok=0;
        if(cnt==m)ok=1;
        for(int j=0;j<n;j++){
            if(dp[i][j]==-1)continue;
            if(ok)ans=max(ans,dp[i][j]);
            for(int o=0;o<n;o++){
                int stu=1<<o;
                if(i&stu)continue;
                dp[i|stu][o]=max(dp[i|stu][o],dp[i][j]+t[j][o]+a[o]);
            }
        }
    }
    printf("%lld",ans);
}

C

A and B and Lecture Rooms CodeForces - 519E

标签:YY+LCA(90)

题目大意

在大学里,小A和小B是一对非常要好的朋友,他们经常一起参加比赛。现在,这个大学里有n个教室,这n个教室用n-1个走廊相互连接,因此学生可以从一个教室经过走廊走到任何其他的教室。 每天,小A和小B都要讨论一些问题。每次下课以后(小A和小B在不同的地方上课),小A和小B就相约去同一个教室讨论问题。小A和小B希望讨论的教室离他们现在各自所在的教室距离相等。两个教室之间的距离指的是他们的最短距离。由于小A和小B每天都要讨论问题,所以他们希望你能帮助他们计算出在接下来的m天里,离他们各自所在的位置距离相等的教室有多少个。

思路:

如果直接暴力枚举每个节点肯定会T。所以得y y一下。设u,v的LCA为lca,则dis(u,v)=dep(u)+dep(v)-2dep(lca)

Case1:u==v则答案为n

Case2: 如果dis(u,v)为偶,则一定不存在某点到 u,v 的距离相等;

Case3:如果dis(u,v)为奇,且dep[u]==dep[v],则路径上的中点就是lca;

Case4:如果dis(u,v)为奇,且dep[u]==dep[v],则路径上的中点在深度较大的那一侧上;

具体看代码,这里求lca用了树剖,其实用倍增会更简洁。

CODE:

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,m;
int f[N][20],sz[N],dep[N],son[N],top[N];
vector<int>e[N];
int UP(int x,int p){
    for(int i=0;i<=17;i++)
      if(p&(1<<i))x=f[x][i];
    return x;
}
int main(){
    n=read();
    for(int i=1,u,v;i<n;i++){
        u=read(),v=read();
        e[u].push_back(v);
        e[v].push_back(u);
    }
    dfs1(1);
    dfs2(1,1);
    for(int i=1;i<=17;i++)
        for(int j=1;j<=n;j++)f[j][i]=f[f[j][i-1]][i-1];
    m=read();
    for(int i=1,u,v;i<=m;i++){
        u=read(),v=read();
        if(u==v){printf("%d\n",n);continue;}
        if(dep[u]<dep[v])swap(u,v);
        int lca=LCA(u,v),dis=dep[u]+dep[v]-2*dep[lca]-1;
        if(dis&1){
            if(dep[u]==dep[v]){//case3
                u=UP(u,dis/2);v=UP(v,dis/2);
                printf("%d\n",n-sz[u]-sz[v]);
            }
            else{//case4
                u=UP(u,dis/2);
                int now=f[u][0];
                printf("%d\n",sz[now]-sz[u]);
            }
        }
        else puts("0");
    }
}

D

Tree CodeForces - 23E

略uus

原文地址:https://www.cnblogs.com/Tieechal/p/11189375.html

时间: 2024-10-12 17:49:52

练习赛44的相关文章

HIHOcoder编程总结

[Offer收割]编程练习赛44 对于第一题题目1 : 扫雷游戏,首先要想清楚思路,虽然是暴力算法,但是这八个方向要自己把坐标写正确,不要慌乱,自己写的时候就写错了一个,第二个就是判断的时候,j + 1>=0,这种是显然的事情,应该是j +1 < N,写草稿也要认真. 还有一个非常非常大的错误. int N = 0; cin >> N; vector<string> input; input.resize(N); for (int i = 0; i < N; ++

中联部原非洲局长被双开:行为底线全失守亦官亦商

稻花香呵呵一笑大家好以后还请多关照而那道白光更是冲刺向前利剑一挥一道璀璨的蓝光剑气横扫了出去无数白光飞起 而且还有N多附加属性至于那个炎舞的特技估计也差不到哪里去总之一套亚特兰蒂斯穿上之后凌雪在白云城基本上是难逢敌手了 而我这边首先要解决的便是骁骑将和地狱火这时候我终于感觉到有些棘手了这些人没有一个是省油的灯现在凑在了一起想要一举击杀谈何容易 She crossed herself once more, then flitted through the opening in the iron g

商学院

前 言 中南大学以“建设特色鲜明的世界一流大学”为办学目标,主动对接国家重大发展战略需求,为行业和地方社会经济发展服务,坚持将“质量提升”作为构建一流本科教育的核心任务.为进一步深化本科教育教学改革,完善本科人才培养体系,全面提升人才培养质量,学校从2014年3月开始,启动2016版本科人才培养方案的修订工作,同时组织了各教学单位对其开设课程的教学大纲进行修订.教学大纲是实施专业培养方案,实现高校培养目标及要求的教学指导文件,是组织教学过程.进行教学质量评估和实施教学管理的主要依据.制订与本科教

猫和老鼠 蓝桥杯/手速/暴力练习赛(暴力搜索)

猫和老鼠 蓝桥杯/手速/暴力练习赛 [题目描述] 猫和老鼠在10*10 的方格中运动,例如: *...*..... ......*... ...*...*.. .......... ...*.C.... *.....*... ...*...... ..M......* ...*.*.... .*.*...... C=猫(CAT) M=老鼠(MOUSE) *=障碍物 .=空地 猫和老鼠每秒中走一格,如果在某一秒末他们在同一格中,我们称他们“相遇”. 注意,“对穿”是不算相遇的.猫和老鼠的移动方式相

2014CSUACM小组练习赛1

就一道中文题,就先看这道,是一道迷宫题,BFS可以解答,路径输出部分正好昨天看最长公共子序列遇到到过.然后做题过程中发现好多人 都把第一题第二题做完了,这时候正好感觉D题有些代码量,就做A B,A题是水题,B题其实也是水题,一开始没看懂题,写了一大坨代码,结果 time limited!然后就沉下心去做D题,1A,继续看B题,同样还是time limited!然后时间就到了,结束重新看了一下题目才恍然大悟. B题代码CodeForce 230A 1 #include<stdio.h> 2 #i

【转】每天一个linux命令(44):top命令

原文网址:http://www.cnblogs.com/peida/archive/2012/12/24/2831353.html top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.下面详细介绍它的使用方法.top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列

Effective C++ 43,44

43.明智地使用多继承. 多继承带来了极大的复杂性.最基本的一条就是二义性. 当派生类为多继承时,其多个基类有同名的成员时,就会出现二义性.通常要明确其使用哪个成员的.显式地限制修饰成员不仅很笨拙,而且会带来限制.当显式地用一个类名来修饰一个虚函数时,函数就会被固定,而不再具有虚拟的特性.对于虚函数,若两个基类拥有一个同名同参的虚函数,当派生类没有重新定义虚函数时(可以只声明),直接调用这个同名函数会出二义性错误,需要指明其类.而当派生类中重新定义了这个函数,这是不可能的,因为一个类只允许有唯一

JACASCRIPT--的奇技技巧的44招

JavaScript是一个绝冠全球的编程语言,可用于Web开发.移动应用开发(PhoneGap.Appcelerator).服务器端开发(Node.js和Wakanda)等等.JavaScript还是很多新手踏入编程世界的第一个语言.既可以用来显示浏览器中的简单提示框,也可以通过nodebot或nodruino来控制机器人.能够编写结构清晰.性能高效的JavaScript代码的开发人员,现如今已成了招聘市场最受追捧的人 1.首次为变量赋值时务必使用var关键字 变量没有声明而直接赋值得话,默认会

暑假练习赛 003 F Mishka and trip

F - Mishka and trip Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Status Description Input Output Sample Input Sample Output Hint Description Peter Parker wants to play a g