답안 #96013

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

#define NM 1000002
#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);
    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 46 ms 47348 KB Output is correct
2 Correct 43 ms 47412 KB Output is correct
3 Correct 43 ms 47352 KB Output is correct
4 Correct 43 ms 47400 KB Output is correct
5 Correct 39 ms 47352 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 46 ms 47348 KB Output is correct
2 Correct 43 ms 47412 KB Output is correct
3 Correct 43 ms 47352 KB Output is correct
4 Correct 43 ms 47400 KB Output is correct
5 Correct 39 ms 47352 KB Output is correct
6 Correct 45 ms 47356 KB Output is correct
7 Correct 50 ms 47864 KB Output is correct
8 Correct 40 ms 47608 KB Output is correct
9 Correct 52 ms 48008 KB Output is correct
10 Incorrect 50 ms 47992 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Correct 45 ms 47480 KB Output is correct
2 Correct 125 ms 52712 KB Output is correct
3 Correct 122 ms 52728 KB Output is correct
4 Correct 127 ms 52984 KB Output is correct
5 Correct 95 ms 51320 KB Output is correct
6 Correct 239 ms 60724 KB Output is correct
7 Correct 238 ms 60792 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 46 ms 47348 KB Output is correct
2 Correct 43 ms 47412 KB Output is correct
3 Correct 43 ms 47352 KB Output is correct
4 Correct 43 ms 47400 KB Output is correct
5 Correct 39 ms 47352 KB Output is correct
6 Correct 45 ms 47356 KB Output is correct
7 Correct 50 ms 47864 KB Output is correct
8 Correct 40 ms 47608 KB Output is correct
9 Correct 52 ms 48008 KB Output is correct
10 Incorrect 50 ms 47992 KB Output isn't correct