T1,T2其实都属于签到题吧,苟蒻当天脑袋被门夹了;
那么T2T3 还是写一下吧,并查集没怎么练熟;
T2 : NKOJ3817
问题描述:
将自然数 1 到 n 任意排列,然后在排列的每两个数之间根据他们的大小关系插入“>”和“<”。 例如:对于 1..5 的一个排列:3 2 4 1 5,可得到:3 > 2 < 4 > 1 < 5,其中有两个“>”和 2 个“<” 。 现在给出自然数 n,问在自然数 1..n 的所有排列中,有多少个排列恰好有 k 个“<”。 请你解答这个问题。
炸一看有点像什么单调队列或者是逆序对,不过通过草稿纸可以发现规律:
二维的f[i][j],i表示第i个自然数,j表示“<”的个数:
f[i-1][j]*(j+1)表示对于有i-1个数,j个“<”的序列,可以有j+1种方法插入第i个数使<的数量不变。
f[i-1][j-1]*( i - j )则是总数量减去不变的数量得到要变的数量。(i+1-(j+1))
在草稿纸上模拟更加形象;
所以我们可以得到方程:
f[i][j]=(f[i-1][j](j+1)+f[i-1][j-1](i-1+j+1));
代码很好写,但是要注意,一次把所有的跑完,就可避免重复讨论,优化复杂度,提升代码效率。
T3:NKOJ2107
问题描述:树上有n只猴子。它们编号为 1 到n。1 号猴子用它的尾巴勾着树枝。剩下的猴子都被其他的猴子用手抓着。每只猴子的每只手可以抓住另一只猴子的尾巴。从0 时刻开始,每一秒都有一只猴子松开它的一只手。这会导致一些猴子掉到地上(它们在地上也能继续松开它们的手,猴子落地的时间很短可以不计)。
你的任务是: 写一个程序,从标准输入读入猴子间抓与被抓住的关系信息,和它们放开手的顺 序,对于每一只猴子算出它落地的时间,把结果输出到标准输出。

输入格式:第一行有两个正整数n和m。n是猴子的数量,m是我们观察猴子的时间(单位为秒)。
接下来n行是初始情 况的描述。第k+1 行有两个整数表示第k个猴子抓住的猴子的编号,前一个数 代表左手抓的猴子的编号,后一个数是右手抓的猴子的编号。如果读入的数为-1 则代表猴子的手是空的。
接下来m行是对猴子观察的结果。在这m行里的第i行,有两个整数。前一个是猴子的编号,后一个是它在时刻i−1 时松开的手的编 号(1-左手,2-右手)。

输出格式:
输出n个整数,每行一个。第i行表示第i个猴子落地的时间,如果在观察结束前猴子没有落地,那么输出-1

样例输入输出:
3 2
-1 3
3 -1
1 2
1 2
3 1
。。。。。。。。
-1
1
1
。。。。。。。。

#include<stdio.h>
#define maxn 400050
#define maxm 800050
#define Min(x,y) ((x<y)?(x):(y))
int n,m,i,j,hand[maxn][2],rel[maxm],flag[maxn][2],father[maxn],id[maxn],ans[maxn];
inline void re(int &d)
{bool f=false;char t=getchar();while(t<'0'||t>'9'){if(t=='-')f=true;t=getchar();}for(d=0;t>='0'&&t<='9';t=getchar())d=(d<<1)+(d<<3)+t-'0';if(f==true)d=-d;
}
int getfather(int x)
{if(father[x]==x)return x;int tmp=getfather(father[x]);ans[x]=Min(ans[x],ans[father[x]]);return father[x]=tmp;
}
void merge(int x,int y,int v)
{int fx=getfather(x),fy=getfather(y);if(fx==fy)return;if(fx>fy)fx^=fy^=fx^=fy;father[fy]=fx;ans[fy]=v;
}
int main()
{re(n);re(m);for(i=1;i<=n;i++)re(hand[i][1]),re(hand[i][2]);//输入for(i=1;i<=m;i++){re(id[i]);re(rel[i]);flag[id[i]][rel[i]]=true;//输入放手并标记为true}for(i=1;i<=n;i++)father[i]=i,ans[i]=1e9;//初始化ans与fatherfor(i=1;i<=n;i++){if(hand[i][1]!=-1&&(!flag[i][1]))merge(i,hand[i][1],1e9);if(hand[i][2]!=-1&&(!flag[i][2]))merge(i,hand[i][2],1e9);//merge不会放手的 }for(i=m;i;i--)if(hand[id[i]][rel[i]]!=-1)merge(id[i],hand[id[i]][rel[i]],i-1);//反向讨论添边 for(i=1;i<=n;i++){getfather(i);if(ans[i]==1e9)puts("-1");//依然挂着else printf("%d\n",ans[i]); }
}

主要思想:就是先把不会放手的先merge一下,反向merge更新ans数组;(需要注意的是当与上层断边的时候,下面的整个联通块都会掉落)

8.26打架被批判一番还是要学习一个相关推荐

  1. Java黑皮书课后题第3章:3.26(使用操作符 ||和^)编写一个程序,提示用户输入一个整数值,然后判断它能否被5和6整除、能否被5或6整除、以及能否被5或6整除但不能被同时整除

    3.26(使用操作符&& ||和^)编写一个程序,提示用户输入一个整数值,然后判断它能否被5和6整除.能否被5或6整除.以及能否被5或6整除但不能被同时整除 题目 题目概述 运行示例 ...

  2. C语言随机生成26个字母,菜鸟求助,写一个随机输出26个英文字母的程序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include // 用srand.rand函数了 #include // 用time函数了 #define LEN 32 // 产生 ...

  3. c语言while输出26个字母,菜鸟求助,写一个随机输出26个英文字母的程序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include // 用srand.rand函数了 #include // 用time函数了 #define LEN 32 // 产生 ...

  4. 字母概率C语言,从26个英文字母中任意选一个,是C或D的概率是()。

    概率的计算方法: (1)列举法(列表或画树状图) (2)公式法; 列表法或树状图这两种举例法,都可以帮助我们不重不漏的列出所以可能的结果. 概率列表法 (1)定义:用列出表格的方法来分析和求解某些事件 ...

  5. 为什么要学习一个适合自己的编码方案

    在我们的生活中,拼音输入法无疑是最人们最常用的一种编码方案,很多人都认为拼音输入法已经很好用了,没有必要再学一个别的输入方法,因此,便有了这篇文章,我将从多个角度来分析我们学习一个更高效的编码方案的好 ...

  6. c语言编程26个字母,菜鸟求助,写一个随机输出26个英文字母的程序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include // 用srand.rand函数了 #include // 用time函数了 #define LEN 32 // 产生 ...

  7. 7月编程排行榜新鲜出炉,再次上演神仙打架!

    时间飞逝,转眼到了2021年下半场,一月一更新的Tiobe编程语言排行榜也已公布.让人关注的C语言.Java和Python之间的较量,这个月发展如何呢?快一起来看看图片 7月Tiobe编程排行榜(前2 ...

  8. 26个思维转换,实现跨越式成长

    <跨越式成长:思维转换重塑你的工作和生活>是超级畅销书<学习之道>作者芭芭拉·奥克利博士的新书,主要讲怎么通过"思维转换"重塑我们的工作和生活. 作者说,思 ...

  9. 一个成都程序猿写于离开北京一周年与26岁生日的这一天。

    ​ 说明:已经连续更新快三个月的技术文章了,本次更新适逢离开北京一周年以及 26 岁生日,所以本文分享个人一些生活琐事与小小的感悟.非技术分享类文章,但是和程序猿生活息息相关,属于本号的荒腔走板环节. ...

  10. python入门编程题库-Python随笔30:Python基础编程练习题25~26

    注:本文所有代码均经过Python 3.7实际运行检验,保证其严谨性. 注:本文所有代码均经过Python 3.7实际运行检验,保证其严谨性. Python编程 Python基础练习题25:合并两个列 ...

最新文章

  1. ssh,FTP到远程服务器时,显示自定义的警告信息
  2. 世界领先!详解蚂蚁金服自研数据库OceanBase的高可用及容灾方案
  3. shell-1-命令与参数
  4. python的if not用法
  5. 蓝图解锁怎么用_[UE4蓝图][Materials]虚幻4中可互动的雪地材质完整实现(一)
  6. 从10亿光年到0.1飞米的世界 (经典!震撼!)
  7. 平方剩余(例题+详解+代码模板)
  8. 常见Promise面试题
  9. Maven中DependencyManagement和Dependencies区别
  10. 无软驱免F6在联想R510-G6-1U服务器上安装win 2003企业版的经历
  11. docker安装nginx并且部署前端项目
  12. 计算机基础知识题库pdf,计算机基础知识题库完整.pdf
  13. yasm/nasm not found or too old. Use --disable-yasm for a crippledbuild错误
  14. Linux系统无法在spyder5中输入中文的解决办法
  15. 对视频马赛克的调研学习报告
  16. 运行JavaScript代码片段的19种工具
  17. FQDN (fully qualified domain name,完全限定域名)
  18. 天翼云应知应会认证重点知识手册
  19. Indie Maker 一个人的创业
  20. NFT带给我们普通人的机遇是什么?

热门文章

  1. mcgs 云服务器,MCGS软件系统的组态环境和运行环境
  2. telnet php,使用php实现telnet功能
  3. StringUtil.isNotEmpty(转)
  4. HAWQ取代传统数仓实践(一)——为什么选择HAWQ
  5. 归并排序java示例
  6. rhce考试试题以及答案_RedHat红帽认证 RHCE 7.0题库和答案
  7. PDF文件在线合并如何操作
  8. Cgroup框架分析
  9. PDF如何转换成jpg图片
  10. 数字图像处理(第三版)