周末训练9.5

拓补排序:https://blog.csdn.net/qq_41713256/article/details/80805338

链式前向星:https://blog.csdn.net/sugarbliss/article/details/86495945

邻接表单向链表->传送门

邻接表:(vector)


1
2
3
4
5
6
7
8
vector<int> G[N];

int u,v;
scanf("%d%d",&u,&v);
G[u].push_back();

for(int i=0;i<G[p].size();i++)
{ int y=G[p][i]; }

快速幂:(模板)


1
2
3
4
5
6
7
8
9
10
11
ll ksm(ll a,ll b)
{
    ll x=1,s=a;
    while(b)
    {
        if(b%2==1) x=(x*s)%m;
        s=(s*s)%m;
        b/=2;
    }
    return x;
}

拓补排序:(有向无环图)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//↓T:旅行计划
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5,INF=1e9;
int n,m;
vector<int> G[N];//邻接表
int rd[N];
queue<int> q;
int ans[N];
int main()
{
//  freopen("plan.in","r",stdin);
//  freopen("plan.out","w",stdout);
   
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++)
    {
        int u,v;
        scanf("%d%d",&u,&v);
        G[u].push_back(v);//邻接表
        rd[v]++;//记录入度
    }
    for(int i=1;i<=n;i++) if(rd[i]==0) q.push(i),ans[i]=1;//入度为0的入队
    while(!q.empty())
    {
        int p=q.front();q.pop();
        for(int i=0;i<G[p].size();i++)
        {
            int y=G[p][i];//找下一个点
            ans[y]=max(ans[y],ans[p]+1);//DP
            rd[y]--;//入度减一
            if(rd[y]==0) q.push(y);//如果入度为0就入队
        }
    }
    for(int i=1;i<=n;i++) printf("%d\n",ans[i]);
   
    return 0;
}

 

比赛:

1.排序问题

题解:过两遍sort,注意mod后的赋值

2.阶乘取模

题解:快速幂

3.旅行计划

题解:拓补排序,注意每个点的初值为为1

4.城市重建

题解:邻接表Dijkstra(只能80分)

BZOJ1483 [HNOI2009] 梦幻布丁

BZOJ

洛谷

链表+启发式合并

懒得写链表

std::set代替链表

首先算出初始状态答案

然后对于每个修改操作,启发式合并两种颜色。

启发式合并:在合并两个集合(或两棵树)时,暴力将较小集合的元素(或结点更少的树的所有节点)合并(或插入)到另一较大集合(或结点更多的树)中。

简单来说就是弱肉强食。

而且启发式合并的时间复杂度可以证明是O(logn)的

对于本题,枚举较小的集合的每个元素,处理答案并且加入较大的集合,同时更改颜色。

对于查询操作,由于每次修改同时都计算出答案,直接输出即可。

继续阅读BZOJ1483 [HNOI2009] 梦幻布丁

BZOJ1588 [HNOI2002]营业额统计

BZOJ1588

splay。

把每天的营业额加入splay,查找前驱和后继,统计即可。

注意使用双旋的splay,因为单旋在链状树的情况下时间复杂度会退化。具体证明去问Tarjan。

也可使用其他平衡树或双向链表。双向链表的做法可参考 朱晨光《基本数据结构在信息学竞赛中的应用》。

继续阅读BZOJ1588 [HNOI2002]营业额统计