답안 #96022

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
96022 2019-02-05T09:41:41 Z alextodoran Shell (info1cup18_shell) C++14
30 / 100
317 ms 154604 KB
#include <bits/stdc++.h>

#define NM 3000002
#define ll long long

using namespace std;

const ll MOD = 1e9+7;

vector <int> ine[NM], oute[NM];

int n, m, p;

int v[NM];
bool spv[NM];

int g[NM];

queue <int> q;

int ord[NM];

int vo[NM];

bool fs (int a, int b)
{
    return ord[a] < ord[b];
}

ll dp[NM];

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin >> n >> m >> p;
    for(int i = 1; i <= p; i++)
    {
        cin >> v[i];
        spv[v[i]] = 1;
    }
    for(int i = 1; i <= m; i++)
    {
        int u, v;
        cin >> u >> v;
        ine[v].push_back(u);
        oute[u].push_back(v);
        g[v]++;
    }
    for(int i = 1; i <= n; i++)
        if(g[i] == 0)
        {
            ord[i] = 1;
            q.push(i);
        }
    while(!q.empty())
    {
        auto f = q.front();
        q.pop();
        for(auto e : oute[f])
        {
            g[e]--;
            if(g[e] == 0)
            {
                ord[e] = ord[f] + 1;
                q.push(e);
            }
        }
    }
    for(int i = 2; i <= p; i++)
        if(ord[v[i]] <= ord[v[i - 1]])
        {
            cout << "0\n";
            return 0;
        }
    for(int i = 1; i <= n; i++)
        vo[i] = i;
    sort(vo + 1, vo + n + 1, fs);
    int last = 1;
    dp[1] = 1;
    for(int i = 1; i <= n; i++)
        if(vo[i] != 1)
        {
            for(auto e : ine[vo[i]])
                if(ord[e] >= ord[last])
                {
                    dp[vo[i]] += dp[e];
                    if(dp[vo[i]] >= MOD)
                        dp[vo[i]] -= MOD;
                }
            if(spv[vo[i]])
                last = vo[i];
        }
    cout << dp[n] << "\n";
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 107 ms 141304 KB Output is correct
2 Correct 107 ms 141304 KB Output is correct
3 Correct 104 ms 141304 KB Output is correct
4 Correct 105 ms 141304 KB Output is correct
5 Correct 104 ms 141304 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 107 ms 141304 KB Output is correct
2 Correct 107 ms 141304 KB Output is correct
3 Correct 104 ms 141304 KB Output is correct
4 Correct 105 ms 141304 KB Output is correct
5 Correct 104 ms 141304 KB Output is correct
6 Correct 104 ms 141384 KB Output is correct
7 Correct 109 ms 141688 KB Output is correct
8 Correct 108 ms 141432 KB Output is correct
9 Correct 113 ms 141900 KB Output is correct
10 Incorrect 135 ms 141628 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Correct 129 ms 141304 KB Output is correct
2 Correct 204 ms 146568 KB Output is correct
3 Correct 198 ms 146664 KB Output is correct
4 Correct 189 ms 146676 KB Output is correct
5 Correct 179 ms 145048 KB Output is correct
6 Correct 317 ms 154604 KB Output is correct
7 Correct 314 ms 154488 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 107 ms 141304 KB Output is correct
2 Correct 107 ms 141304 KB Output is correct
3 Correct 104 ms 141304 KB Output is correct
4 Correct 105 ms 141304 KB Output is correct
5 Correct 104 ms 141304 KB Output is correct
6 Correct 104 ms 141384 KB Output is correct
7 Correct 109 ms 141688 KB Output is correct
8 Correct 108 ms 141432 KB Output is correct
9 Correct 113 ms 141900 KB Output is correct
10 Incorrect 135 ms 141628 KB Output isn't correct