周末训练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分)

7月21日备战Noip2017暑假集训6(A) 单词 【拓扑排序】

单词

【问题描述】

在一种未知语言中,很多单词被发现了,但是他们的字母的字典序我们是不知道的。我们知道的是,这些单词是按照字典序从小到大排列的。

或者找出这种语言唯一的字母的字典序,或者得出这种方案是不存在的,或者得出有很多种这样的方案。

【输入格式】

第一行包括一个正整数n(1 <= n <= 100),表明单词的数量。

接下来n行,每行一个单词,每个单词最多包含10个小写的英文字母。保证单词以未知语言的字典序给出。

【输出格式】

有且仅有一行,输出包含所有字母的字典序。如果没有这种字典序,则输出“!”,如果有多种方案则输出“?”。

【输入样例1

5

ula

uka

klua

kula

al

【输出样例1

luka

【输入样例2

4

jaja

baba

baja

beba

【输出样例2

【输入样例3

3

marko

darko

zarko

【输出样例3

数据范围与约定

对于30%的数据:n <= 20。

对于100%的数据:n <= 100。

继续阅读7月21日备战Noip2017暑假集训6(A) 单词 【拓扑排序】