2021.09.09am
| --- | 预期 | 实际 |
|---|---|---|
| A | 100 | 25 |
| B | 100 | 100 |
| C | 100 | 0 |
| D | 100 | 0 |
| E | 100 | 100 |
| F | 100 | 100 |
| G | 100 | 50 |
| H | 100 | 100 |
| S | 800 | 475 |
可能水,一定菜
A 查找二叉树 \(\blacktriangle\)
- 简单模拟。
- 按照要求遍历再输出就好了。
- 时间复杂度轻轻松松\(O(n)\)
B 找树根和孩子 \(\blacktriangle\)
- 简单模拟
- 树根看入度是否为\(0\)
- 孩子最多即出度最多
C 铲雪车 \(\blacktriangle\)
- 简单模拟
- 欧拉回路(但是双向路太白给了吧)
- 只不过四舍五入太恶心人了
D 分糖果 \(\blacktriangle\)
- 简单模拟
(据说样例解释错了,数据范围也很有毛病) - 可以 \(BFS\),我用的 \(DFS\),
没有正确性 - 最大深度再加上吃糖果的时间就是答案
E 刻录光盘 \(\blacktriangle\!\blacktriangledown\)
- \(DFS\)+微量拓扑思路
- 首先找到入度为\(0\)的点,这类点必须得要消耗光盘,这些点进行 \(dfs\)覆盖尽可能多的点。
- 然后对于环,我们只需要随便挑一个点放一个光盘即可。
F 烦人的幻灯片 \(\blacktriangle\!\blacktriangledown\)
我站在强度至上的第一排
拓扑排序入门题
这里尝试一下题解的新水法
#include<cstdio>
#include<queue>
using namespace std;
int n;
struct u2004{
int x1,y1,x2,y2;
}p[30];
int deg[30],ys[30];//ys->映射
bool used[30];
queue<int> q[30],_q[30];
inline void scan(){
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d%d%d%d",&p[i].x1,&p[i].x2,&p[i].y1,&p[i].y2);
int x,y;
for(int i=1;i<=n;i++){
scanf("%d%d",&x,&y);
for(int j=1;j<=n;j++){
if(p[j].x1<=x&&x<=p[j].x2&&p[j].y1<=y&&y<=p[j].y2){//在幻灯片范围内
q[j].push(i);//chae->number
_q[i].push(j);//number->char(反图
deg[j]++;//一个字符的可能数字数目,或者叫度
}
}
}
}
queue<int> dui;
inline void suan(){
int xx;
for(int i=1;i<=n;i++){
if(deg[i]==1){//华点。这个字符只用一个数字为可能
ys[i]=xx=q[i].front();//我们取出这个一定的数字,并且把它存起来
dui.push(xx);//将它放到堆里面
used[xx]=1;//标记已经被用掉了
}
}
int x,y;
while(!dui.empty()){
x=dui.front();
dui.pop();
while(!_q[x].empty()){//_q:num->char
y=_q[x].front();//取出这个数字覆盖到的所有幻灯片
_q[x].pop();
deg[y]--;//幻灯片的可行数字数目-1
if(deg[y]==1){
while(!q[y].empty()){//q:char->num
int z=q[y].front();
q[y].pop();
if(!used[z]){//用过了就跳过,用queue的弊端
used[z]=1;//一直好奇有没有O(1)删除内部任意元素,O(1)在末尾插入一个数的数据结构
ys[y]=z;//存起来
dui.push(z);
break;
}
}
}
}
}
}
inline void print(){
for(int i=1;i<=n;i++)
if(!ys[i]){
puts("None");//一旦出现没有答案的情况就是无解
return;
}
for(int i=1;i<=n;i++)
printf("%c %d\n",i+'A'-1,ys[i]);
}
int main(){
scan();
suan();
print();
return 0;//再见
}
G 构造完全树 \(\blacktriangle\!\blacktriangledown\)
- 昨天原题啊(数组开挂了)
H Intervals \(\blacktriangle\!\blacktriangledown\)
- 可以贪心,也可以建图
- 建图我记得讲过,
忘了 - 这道题又和之前有一道很像,可以说是加强版,我就按上次的方法写了个贪心
- 唯一要注意的是要找位置进行标记,要支持区间查询与区间或单点修改
- 容易想到用线段树维护
- 但是,我用的树状数组+分治(感觉和线段树差不多)
- 分治子区间内空位,优先选择把靠后的区间填满,若有剩余再填靠前的区间
- 时间复杂度\(O(n\log n)\),也是比较优秀的
![image]()
\(\cal {Made} \ {by} \ {YuGe}\)

浙公网安备 33010602011771号