zoukankan      html  css  js  c++  java
  • 校内模拟赛解题报告(考后总结)———2019.11.06

    T1 题目链接

    代码:

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    
    long long n,L,R;
    long long f[1000];
    
    void print(long long x,long long l,long long r){
        if(x==0){
            printf("0");
            return;
        }
        if(x==1){
            printf("1");
            return;
        }
        if(l>=f[x-2]) print(x-1,l-f[x-2],r-f[x-2]);
        else if(r<f[x-2]) print(x-2,l,r);
        else print(x-2,l,f[x-2]-1),print(x-1,0,r-f[x-2]);
    }
    
    int main(){
        std::cin>>n>>L>>R;
        if(n==0) {printf("0
    ");return 0;}
        if(n==1) {printf("1
    ");return 0;}
        f[0]=1;f[1]=1;
        int i;
        for(i=2;i<=n;i++){
            f[i]=f[i-1]+f[i-2];
            if(f[i]>R) break;
        }
        if(L==0){
            if(n%2==0){
                if(R==0) {printf("0
    ");return 0;}
                else printf("01");
            }else{
                if(R==0) {printf("1
    ");return 0;}
                else printf("10");
            }
            L=2;
        }if(L==1){
            if(n%2==0) printf("1");
            else printf("0");
            L=2;
        }
        print(i,L,R);
        std::cout<<std::endl;
        return 0;
    }
    View Code

    T2题目链接

    代码:

    #include<cstdio>
    #include<algorithm>
    #include<iostream>
    
    const int inf=2147483647;
    const int N=200100;
    int fa[N],dep[N],mindep[N];
    int e[N*2],next[N*2],point[N],t;
    int n,k;
    
    void merge(int u,int v){
        e[++t]=v;
        next[t]=point[u];
        point[u]=t;
    }
    void build(int x){
        int ok=0;
        for(int i=point[x];i;i=next[i]){
            int v=e[i];
            if(v==fa[x]) continue;
            fa[v]=x;
            dep[v]=dep[x]+1;
            ok=1;
            build(v);
            mindep[x]=std::min(mindep[x],mindep[v]+1);
        }
        if(!ok){
            mindep[x]=0;
            return;
        }
    }
    int dfs(int x){
        if(dep[x]>=mindep[x]) return 1;
        int ret=0;
        for(int i=point[x];i;i=next[i]){
            int v=e[i];
            if(v==fa[x]) continue;
            ret+=dfs(v);
        }
        return ret;
    }
    int main(){
        std::cin>>n>>k;
        for(int i=1;i<n;i++){
            int u,v;
            scanf("%d%d",&u,&v);
            merge(u,v);
            merge(v,u);
        }
        for(int i=1;i<=n;i++) mindep[i]=inf;
        dep[k]=0;
        build(k);
        std::cout<<dfs(k)<<std::endl;
        return 0;
    }
    View Code

    T3题目链接

    #include<bits/stdc++.h>
    using namespace std;
    #define maxn 100005
    #define ll long long
    #define inf 100000000
    int n,m,k,l,a,b,c,ins[maxn],scc[maxn],cnt=0,num=0,dfn[maxn],low[maxn],in[maxn],dmi[maxn],dmx[maxn],visit[maxn]
    ,sv[maxn],val[maxn];
    struct edge{
        int from,to;
    };vector<edge>edges;vector<int>g[maxn];vector<edge>mp[maxn];vector<edge>mp2[maxn];
    void add_edge(int f,int t){edges.push_back({f,t});g[f].push_back(k++);
    }stack<int>s;
    void tarjan(int u){
        low[u]=dfn[u]=++num;ins[u]=1;s.push(u);
        for(int i=0;i<g[u].size();i++){
            edge &e=edges[g[u][i]];
            if(!dfn[e.to]){tarjan(e.to);
                low[u]=min(low[u],low[e.to]);
            }else if(ins[e.to])
                low[u]=min(low[u],dfn[e.to]);
        }if(low[u]==dfn[u]){
                int y;cnt++;
                do{y=s.top();ins[y]=0;scc[y]=cnt;
                    val[cnt]+=sv[y];s.pop();
                }while(u!=y);
        }
    }int main(){
        cin>>n>>m;for(int i=1;i<=n;i++)sv[i]=1;
        for(int i=1;i<=m;i++)cin>>a>>b,add_edge(a,b);
        for(int i=1;i<=n;i++)if(!dfn[i])tarjan(i);
        for(int i=0;i<edges.size();i++){
            int f=edges[i].from,t=edges[i].to;
            if(scc[f]!=scc[t]){mp[scc[f]].push_back({scc[f],scc[t]});
                mp2[scc[t]].push_back({scc[t],scc[f]});
            }
        }queue<int>q;memset(dmx,0,sizeof(dmx));q.push(scc[1]);dmx[scc[1]]=val[scc[1]];visit[scc[1]]=1;
        while(!q.empty()){
            int u=q.front();q.pop();visit[u]=0;
            for(int i=0;i<mp[u].size();i++){
                edge &e=mp[u][i];
                if(dmx[e.to]<dmx[u]+val[e.to]){
                    dmx[e.to]=dmx[u]+val[e.to];
                    if(visit[e.to]==0){
                        q.push(e.to);
                    }
                }
            }
        }for(int i=1;i<=n;i++)dmi[i]=0;
        q.push(scc[1]);dmi[scc[1]]=val[scc[1]];visit[scc[1]]=1;
        memset(visit,0,sizeof(visit));
        while(!q.empty()){
            int u=q.front();q.pop();visit[u]=0;
            for(int i=0;i<mp2[u].size();i++){
                edge &e=mp2[u][i];
                if(dmi[e.to]<dmi[u]+val[e.to]){
                    dmi[e.to]=dmi[u]+val[e.to];
                    if(visit[e.to]==0){
                        q.push(e.to);
                    }
                }
            }
        }
        int ans=-inf;
        for(int i=0;i<edges.size();i++){
            edge &e=edges[i];
            if(dmi[scc[e.to]]!=inf&&dmx[scc[e.from]]!=0)ans=max(dmi[scc[e.to]]+dmx[scc[e.from]]-val[scc[1]],ans);
            if(dmi[scc[e.from]]!=inf&&dmx[scc[e.to]]!=0)ans=max(dmi[scc[e.from]]+dmx[scc[e.to]]-val[scc[1]],ans);
        }cout<<ans<<endl;
        return 0;
    }
    View Code
  • 相关阅读:
    Windows下Jupyter notebook 更改工作目录
    AttributeError: Can only use .str accessor with string values, which use np.object_ dtype in pandas
    python中sorted函数
    U3d学习001-RollBox例子
    猴哥来了-游戏开发记录17-微信排行榜bug
    写在自己40岁生日,勉励自己,再度出发!
    python网页爬虫开发之一
    python学习笔记之二
    python学习笔记之一
    conda和pip环境管理
  • 原文地址:https://www.cnblogs.com/ydclyq/p/11818267.html
Copyright © 2011-2022 走看看