• ICPC Latin American Regional Contests 2019 I题


    只需要进行拓扑排序求一下路径总数就可以

    但是我在求第二问的时候被坑了,因为我是求完之后枚举判断f[i]也就是到这个点的路径是否为0来判断是否到达

    但是忽略了一种极端情况,也就是当次数是模数的整数倍的时候,答案经过取余后等于0,但这其实是已经到达了的

    太坑了,刚开始真的没想到。

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<map>
    #include<algorithm>
    #include<queue>
    #include<set>
    #define ull unsigned long long
    using namespace std;
    typedef long long ll;
    const int N=2005;
    const int mod=1e9+7;
    int a[N];
    ll f[N];
    int vis[2005];
    ll in[N];
    vector<ll> g[N];
    ll ans;
    ll n;
    ll l;
    void topo(){
        vis[1]=1;
        queue<ll> q;
        int i;
        for(i=1;i<=l;i++){
            if(!in[i])
                q.push(i);
        }
        while(q.size()){
            ll u=q.front();
            q.pop();
            int i;
            for(i=0;i<g[u].size();i++){
                ll t=g[u][i];
                in[t]--;
                if(!in[t])
                    q.push(t);
                f[t]=(f[t]+f[u])%mod;
                if(vis[u])vis[t]=1;
            }
        }
    }
    int main(){
        int i;
        cin>>n>>l;
        for(i=1;i<=l;i++){
            int k;
            cin>>k;ll u;
            for(int j=1;j<=k;j++){
                scanf("%lld",&u);
                g[i].push_back(u);
                in[u]++;
            }
        }
        f[1]=1;
        topo();
        ll res=0;
        for(i=l+1;i<=n;i++){
            ans=(ans+f[i])%mod;
            if(vis[i]){
                res=(res+1)%mod;
            }
        }
        cout<<ans<<" "<<res<<endl;
    }
    View Code
  • 相关阅读:
    c# 字符串中某个词出现的次数及索引
    c# 冒泡排序
    WCF 高级知识
    Web Api基础知识
    Web Services基础知识
    WCF Demo
    IIS部署WCF常见错误
    IIS部署WCF
    IIS部署WCF错误
    WCF基础知识
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/12663565.html
Copyright © 2020-2023  润新知