「小组联考」第二周三次考试

  • T1 「JOISC 2016 Day 3」电报

    • 题目
    • 考场思考
    • 正解
  • T2 「CQOI2016」路由表
    • 题目
    • 考场思考
    • 正解
  • T3 「NOIP2014」飞扬的小鸟
    • 题目
    • 考场思考
    • 正解

这次考试感觉迷迷糊糊的。
刚开始睡完午觉还没有清醒,然后就晕了大概半个小时。
然后就开始看题…结果这几个题又是大文章…
以为可以 AAA 掉 T3T3T3 ,结果因为题目原因被坑掉 70pts70pts70pts …
看来这个考试可以不用考了…

T1 「JOISC 2016 Day 3」电报

题目

点这里

考场思考

迷迷糊糊,没思考,代码都没交过…

正解

首先,这个题的时间复杂度非常友好…
看看这个图的特性,发现它是基环树。
所谓基环树,就是有 NNN 个点,NNN 条边 (部分特性)
那么,如果我们要将这样一个图变成一个强连通图,说明这样一个图一定是一个大环。
但是知道这些,似乎也不知道怎么做题…
这个题目,似乎没有说这些边拆掉之后怎么接,那么我们就不需要考虑怎么再把边接上去。
所以…嘿嘿嘿管那么多干嘛。
为了将这个图变成一个大环,我们先找出环,将不在环上的点拼成一条单链。
怎么做呢?
考虑一个不在环上的节点 uuu ,它的入度 in[u]in[u]in[u]。
如果 in[u]>1in[u]>1in[u]>1,那么在连向 uuu 的边中,留下花费最大的,将其余的都切掉,至于怎么接,这不是我们考虑的范围…
但是如果 uuu 在环上,同理,留下花费最大的,将其余的都切掉。
但是有一个特殊的地方,每个环必须切掉一条边,不然它们就没有办法和其他的环或者单链练成一个大环。
具体实现

#include<cstdio>
#include<cstdlib>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;
#define int long long
#define rep(q,__a,__b) for(int q=__a,q##_end_=__b;q<=q##_end_;++q)
#define dep(q,__a,__b) for(int q=__a,q##_end_=__b;q>=q##_end_;--q)
template<class T>inline void qread(T& x){char c;bool f=false;x=0;while((c=getchar())<'0'||'9'<c)if(c=='-')f=true;for(x=(c^48);'0'<=(c=getchar())&&c<='9';x=(x<<1)+(x<<3)+(c^48));if(f)x=-x;
}
template<class T,class... Args>inline void qread(T& x,Args&... args){qread(x),qread(args...);}
inline int rqread(){char c;bool f=false;int x=0;while((c=getchar())<'0'||'9'<c)if(c=='-')f=true;for(x=(c^48);'0'<=(c=getchar())&&c<='9';x=(x<<1)+(x<<3)+(c^48));return f?-x:x;
}
template<class T>inline T Max(const T x,const T y){return x>y?x:y;}
template<class T>inline T Min(const T x,const T y){return x<y?x:y;}
template<class T>inline T fab(const T x){return x>0?x:-x;}
inline void getInv(int inv[],const int r,const int MOD)
{inv[0]=inv[1]=1;for(int i=2;i<=r;++i)inv[i]=1ll*inv[MOD%i]*(MOD-MOD/i)%MOD;}const int MAXN=1e5;
const int INF=0x3f3f3f3f;struct edge{int u,w;edge(){}edge(const int U,const int W):u(U),w(W){}
};
vector<edge>rG[MAXN+5];int N,in[MAXN+5],fa[MAXN+5],ans,bel[MAXN+5],Ccnt,faw[MAXN+5],cirNode[MAXN+5];
bool vis[MAXN+5],broken[MAXN+5],flg;inline void topo(){queue<int>Q;for(int i=1;i<=N;++i)if(in[i]==0)Q.push(i);if(Q.empty())flg=true;while(!Q.empty()){int now=Q.front();Q.pop();vis[now]=true,--in[fa[now]];if(in[fa[now]]==0)Q.push(fa[now]);}//处理属于哪个环for(int i=1,u;i<=N;++i)if(!vis[i]&&!bel[i]){//是环上点u=i,++Ccnt;cirNode[Ccnt]=i;while(bel[u]==0){bel[u]=Ccnt;u=fa[u];}}if(flg&&Ccnt==1)exit(0&puts("0"));
}inline void init(){qread(N);for(int i=1;i<=N;++i){qread(fa[i],faw[i]);++in[fa[i]];rG[fa[i]].push_back(edge(i,faw[i]));}
}inline bool cmp(const edge a,const edge b){return a.w>b.w;}inline void solvenode(){//处理入度多于 1 的点for(int i=1;i<=N;++i)if(rG[i].size()>1){sort(rG[i].begin(),rG[i].end(),cmp);for(int j=rG[i].size()-1;j>=1;--j){ans+=rG[i][j].w;if(bel[i]==bel[rG[i][j].u])broken[bel[i]]=true;}}
}inline void breakcircle(){for(int i=1,j,k,mine;i<=Ccnt;++i)if(!broken[i]){//如果有环还没有被破开j=k=cirNode[i],mine=faw[j];do{// printf("Now k==%lld\n",k);if(rG[k].size()>1)mine=Min(mine,rG[k][0].w-rG[k][1].w);//可以保证,没有被删掉的边一定是环上边mine=Min(mine,faw[k]);k=fa[k];}while(k!=j);// printf("circle %lld:mine==%lld\n",i,mine);ans+=mine,broken[i]=true;}
}signed main(){// freopen("04-20.in","r",stdin);init();topo();solvenode();// printf("After node:ans==%lld\n",ans);breakcircle();printf("%lld\n",ans);return 0;
}

T2 「CQOI2016」路由表

题目

点这里

考场思考

题目过长直接跳过系列
这道题…它的上辈子是论文吧…看到这长度直接跳过

正解

考完之后,耐下心读了遍题,发现这道题其实是可做的。
首先搞懂题意,掩码就是它会用到的长度,而其他没有用到的地方,直接扔掉就可以了…
操作 AAA:
输入一个网址,加入进网址序列
操作 QQQ:
询问一个网址 webwebweb,在 aaa 到 bbb 的网址加入网址序列时,webwebweb 的发送对象会变更多少次。
发送对象是什么呢?
就是能与其匹配,且最长最精准的网址
再仔细想想,这不就是 trietrietrie 树吗?
加入网址,就是在 trietrietrie 树上加入一个长度为 网址掩码 的二进制字符串。
但是因为询问是在不同的时间点,所以我们要建的是持久化 trietrietrie 树。
但是操作 QQQ 呢?
我们先来想想,发生发送对象变更现象(并不是专业名称,只是作者自己取名下文简称发变现象)时,到底发生了什么。
从定义看,发变就是与询问网址 webwebweb 匹配,且最长精确的网址在添加 aaa 到 bbb 网址时,发生了变化。
为什么会发生变化?
假设我们在 iii 时刻,添加了网址 xxx ,在 jjj 时刻,添加了网址 yyy,令 yyy 对于询问 webwebweb 是优于 xxx 的。
那么,讨论 iii 与 jjj 的关系

  • 当 i<ji<ji<j 时,我们在时刻 iii 到 j−1j-1j−1,一定是用网址 xxx 的,而当到时刻 jjj到的时候,就会发生发变现象,发送对象 xxx 变成了 yyy。
  • 当 i>ji>ji>j 时,说明在 iii 之前就有比 xxx 更优的网址了,那么是不会发生发变现象的

所以,只需要求出 i<ji<ji<j 且 yyy 优于 xxx 的情况就行了。
那么怎么处理呢?
一个好问题,但是我们看看这样的形式:
i<ji<ji<j 且 yyy 优于 xxx
自然而然想到单调栈虽然我是在老师提醒下发现的
该怎么个单调法呢?
假若我们以时间顺序,放入网址,以网址的优劣为单调对象,那么时间复杂度是 O(b−a)O(b-a)O(b−a) 级别
呵呵,1e61e61e6 玩个锤子

「小组联考」第二周三次考试相关推荐

  1. 「多校联考」第三周二场

    「多校联考」第三周二场 T1 分数转换 题目 考场思考(正解) T2 Slow Path Finding Algorithm (SPFA) 考场思路 正解 T3 切面包 考场思路 正解 这套题是真的很 ...

  2. 管理综合联考可以用计算机嘛,考试可以带计算器吗?可以带草稿纸吗?

    考试可以带计算器吗?可以带草稿纸吗? 来源:信管网 2018年02月13日 [所有评论] 大鹏展翅(cnitpm.com) 15:15:26 考试不让带计算器 默默(cnitpm.com) 15:16 ...

  3. flash动画设计期末作业_「2019年下学期」第二十五二十六节:期末作品三-吉祥物设计...

    初心 伟大的艺术品不必追随潮流,他本身就能引领潮流. 课前准备 软件安装 [2019(上)]<三维建模与动画设计> [2019年下学期]第一节:选修介绍及选修人数确定 [2019年下学期] ...

  4. 「容联云」组织效能提升,从统一通讯到综合协同

    进入产业互联网时代,云计算.AI.大数据.5G等新技术正在重构社会生产要素和生产关系,各产业将迎来重大发展机遇.12月19日,以"融合创新,数智未来"为主题,2021中关村数字经济 ...

  5. 「开源人说」第二期重磅上线!一起走进《从开源中来,到开源中去》

    简介:你是否思考过开源的意义?是获取免费种子用户?还是技术贡献社会价值? 开源意义千人千面,最重要的是参与进来和分享出去.贯彻开源精神,龙蜥社区从Linux开源而来,CentOS替换出发,捐赠给开放原 ...

  6. 计算机专业两次联考成绩分析,计算机操作员考试成绩分析

    截止本文发稿时,深圳市计算机操作员考试已开考了五个批次,笔者对这五个批次的考试成绩做了比较详尽的统计与分析,从总体来看,考试成绩相当不理想,但**还是在一步步提升,相信经过一段时间的洗练之后,该工种的 ...

  7. 五月联考的总(lao)结(sao)

    这个星期四和星期五就是传说中的五月联考 然而今天就是星期五~ 怎么说好呢 这个联考是第二次期中考了 (第一次期中考→ http://blog.csdn.net/enjoy_pascal/article ...

  8. 2023年MBA/MPA/MEM联考笔试答题抓分点

           距离今年的管理类联考还有一个月左右的时间,在最后这个阶段,除了继续稳固的提升自身应试的基本能力之外,一些细节和技巧也要特别关注和留意,说不定可以在考场上帮自己更好的抓分.今天杭州达立易考 ...

  9. 同等学力申硕与联考的区别在哪?

    随着社会的发展,就业压力的增大,很多上班族都想要迫切提高个人的专业能力和自身的竞争力,能够在职场的竞争中增大自身砝码.而自2016年10月联考的取消,在职研究生分为两种形式,5月同等学力申硕和一月联考 ...

最新文章

  1. dropout层的作用_循环神经网络的 Dropout
  2. cxf 整合 spring 时 java.lang.VerifyError异常
  3. Android Support v4、v7、v13 介绍
  4. 《JavaScript高级程序设计》阅读笔记(七):ECMAScript中的语句
  5. python迭代是什么意思_python中什么是迭代?
  6. C++11的静态断言
  7. 【牛客 - 371牛客OI周赛7-提高组A】小睿睿的等式(dp,暴力 )
  8. a recordset php,UsingCOMwithPHP(我就不翻译了)_PHP
  9. RHEL6.3 ftp服务器参数的戏说——不看白不看,看了不白看
  10. 马哥python课堂笔记_马哥-python-课堂笔记12-python核心数据类型及类型显示转换
  11. opencv 学习第二课 摄像头、外部视频读取、处理、显示、写入 代码注释版 保证你每一行都能读懂
  12. (三)线程同步工具集_1---控制线程并发访问一个资源
  13. windows10系统下设置mtu值的方法
  14. 做片子留着备用 超级游戏影视配乐音效库36套合集
  15. Autodesk Maya入门到精通学习教程
  16. 格拉姆角场(GAF)学习记录
  17. 2019级吉林大学计软实验题目解析
  18. 武汉科技大学计算机复试机试,2019年武汉科技大学考研复试及录取工作方案
  19. ise17.4 版本的安装
  20. 如何训练GAN?训练GAN的技巧和方法

热门文章

  1. Reactive的方式访问Redis
  2. 【ANDROID 】交叉编译链工具
  3. MobCtrl万能遥控-手机控制电脑软件简介[官方]
  4. 二手电商的盛与衰:闲鱼持续扩张,爱回收稳扎稳打,转转战略失焦
  5. 高管离职、亏损百亿、合规难题,首汽约车的努力配不上野心
  6. win10 bat执行cmd命令
  7. 【java基础】运动员和教练
  8. 程序猿如何提高自己的搜索技能
  9. MyBatis发展历史
  10. 【Autosar Can网络远程唤醒】