zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 40 (Rated for Div. 2)

    这场没打啊

     

    A. Diagonal Walking

    签到


     

    B. String Typing

    签到


    C. Matrix Walk

    题意

    给一个x*y的矩阵A,对于每个    Ai, j = y(i - 1) + j,矩阵中的格子一步可以走到相邻的格子,现给出路径序列,问y的大小,以及路径是否合理

    分析

    分析可知相邻两个点差值的绝对值不为1的话,则为y

    只要注意一下,

    1 2 3 

    4 5 6, 3->4  /  4->3 这两种不可一步互相到达即可


    D. Fight Against Traffic

    题意

    给一个n个点,m条边的无向图,给定起点s,终点t,问现增加一条边使得s到t的最短路不变的方案数(n,m<=1e3 )

    分析

    最短路?(X)

    分别从s和t跑一次bfs,记录下所有点到s和t的距离,枚举所有没有给的边,check一下即可

    check:如果加的这条边使得s到t的最短路变小,则一定经过这条边,只需枚举一下边的端点即可

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<queue>
    #include<map>
    #include<vector>
    #include<set>
    #include<ctime>
    #include<bits/stdc++.h>
    #define LL long long
    #define db double
    #define EPS 1e-15
    #define inf 1e16
    #define pa pair<int,int>
    
    using namespace std;
    
    const int maxn = 1000+5;
    
    int ds[maxn], dt[maxn];
    int n,m,s,t;
    vector<int>g[maxn];
    bool vis[maxn];
    int mp[maxn][maxn];
    
    void bfs(int ss)
    {
        memset(vis,0,sizeof(vis));
        vis[ss]=1;
        ds[ss]=0;
        queue<int>q;
        while(!q.empty())
            q.pop();
        q.push(ss);
        while(!q.empty())
        {
            int u=q.front();
            q.pop();
            for(int i=0;i<int(g[u].size());i++)
            {
                if(!vis[g[u][i]])
                {
                    vis[g[u][i]]=1;
                    ds[g[u][i]]=ds[u]+1;
                    q.push(g[u][i]);
                }
            }
        }
    }
    void bfsa(int tt)
    {
        memset(vis,0,sizeof(vis));
        vis[tt]=1;
        dt[tt]=0;
        queue<int>q;
        while(!q.empty())
            q.pop();
        q.push(tt);
        while(!q.empty())
        {
            int u=q.front();
            q.pop();
            for(int i=0;i<int(g[u].size());i++)
            {
                if(!vis[g[u][i]])
                {
                    vis[g[u][i]]=1;
                    dt[g[u][i]]=dt[u]+1;
                    q.push(g[u][i]);
                }
            }
        }
    }
    
    
    int main()
    {
        int u, v;
        scanf("%d%d%d%d", &n, &m, &s, &t);
        for(int i=1;i<=m;i++)
        {
            scanf("%d%d", &u, &v);
            g[u].push_back(v);
            g[v].push_back(u);
            mp[u][v]=mp[v][u]=1;
        }
        bfs(s);
        bfsa(t);
        int cnt=0;
        for(int i=1;i<=n;i++)
        {
            for(int j=i+1;j<=n;j++)
            {
                if(!mp[i][j])
                {
                if((ds[i]+dt[j]+1)>=ds[t] && (dt[i]+ds[j]+1)>=ds[t])
                    cnt++;
                }
            }
        }
        printf("%d
    " ,cnt);
        return 0;
    }
    View Code

    E. Water Taps

    题意

     

     

     

    分析


     

     

     

    F. Runner's Problem

     

    题意

     

     

     

    分析

     


    G. Castle Defense

     

    题意

     

     

     

    分析

     

  • 相关阅读:
    最小生成树
    图论最短路径例题
    广搜例题
    这些搜索套路好深。。。
    高斯消元part2
    高斯消元与行列式求值 part1
    2020/4/24
    实时的眼部追踪
    2020/4/23
    2020/4/22
  • 原文地址:https://www.cnblogs.com/Superwalker/p/8641400.html
Copyright © 2011-2022 走看看