20210909上午
二分图,你毁了多少人的生活!
T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8 | |
---|---|---|---|---|---|---|---|---|
预测 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
一测 | 100 | 100 | 80 | 100 | 100 | 67 | 50 | 100 |
T1:
。。。模拟。
T2:
。。。模拟。
T3:
来回的意思是双向两条边。。。所以每个点度数一定为偶数,一定有一种方法能不重复遍历所有边,所以算出总距离乘二除
20
k
m
/
h
20km/h
20km/h就行,精度出了点小问题。
T4:
边权为
1
1
1的最长路,
b
f
s
bfs
bfs即可。
T5:
入度为0的点需要一份,没有分支的环需要一份,其余有入度的点一定能从别人那搞到,所以先跑入度为0的再跑没访问过的点就行。
T6:
考场上一眼二分图,但为啥过不了呢,怎么回事呢。
正解是直接连图向ppt,跑一遍拓扑就行,但为啥二分图过不去啊淦。
T7:
跟昨天T4一模一样,空间开小痛失50。
T8:
写了个
O
(
n
l
o
g
n
l
o
g
n
)
O(nlognlogn)
O(nlognlogn)的瞎搞算法竟然过了,诶嘿~。
显然有贪心策略把区间按右端点排序后每次贪心取右边的数,建颗线段树维护修改信息,每次如果之前填的数够了就跳,不够就在右边填,但右边也被填的坑坑洼洼,所以后面填的位置需要一个二分,于是就把这个题乱搞出来了。
//二分
int binarysearch(int x,int s)
{
int l=max(q[x].l,1),r=q[x].r,Mid;
while(l<r)
{
Mid=(l+r+1)>>1;
if((q[x].r-Mid+1)-t.query(1,L,R,Mid,q[x].r)>=s) l=Mid;
else r=Mid-1;
}
return l;
}
//处理区间
for(int i=1;i<=n;i++)
{
int now=t.query(1,L,R,q[i].l,q[i].r);
if(now>=q[i].s) continue;
t.Change(1,L,R,binarysearch(i,q[i].s-now),q[i].r,1);
}
总结:依旧是简单图论,知识点还没多大问题,乱搞是第一生产力。