답안 #96023

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
96023 2019-02-05T09:53:48 Z alextodoran Shell (info1cup18_shell) C++14
30 / 100
297 ms 154504 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 = 0;
    for(int i = 1; i <= n; i++)
        if(vo[i] != 1)
        {
            if(last != 0)
                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];
        }
        else
        {
            if(last == 0)
                dp[1] = 1;
            last = 1;
        }
    cout << dp[n] << "\n";
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 124 ms 141308 KB Output is correct
2 Correct 124 ms 141308 KB Output is correct
3 Correct 124 ms 141304 KB Output is correct
4 Correct 126 ms 141228 KB Output is correct
5 Correct 124 ms 141276 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 124 ms 141308 KB Output is correct
2 Correct 124 ms 141308 KB Output is correct
3 Correct 124 ms 141304 KB Output is correct
4 Correct 126 ms 141228 KB Output is correct
5 Correct 124 ms 141276 KB Output is correct
6 Correct 124 ms 141276 KB Output is correct
7 Correct 111 ms 141584 KB Output is correct
8 Correct 122 ms 141548 KB Output is correct
9 Correct 114 ms 141800 KB Output is correct
10 Incorrect 133 ms 141660 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Correct 127 ms 141304 KB Output is correct
2 Correct 206 ms 146640 KB Output is correct
3 Correct 187 ms 146612 KB Output is correct
4 Correct 186 ms 146600 KB Output is correct
5 Correct 158 ms 144940 KB Output is correct
6 Correct 297 ms 154504 KB Output is correct
7 Correct 293 ms 154404 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 124 ms 141308 KB Output is correct
2 Correct 124 ms 141308 KB Output is correct
3 Correct 124 ms 141304 KB Output is correct
4 Correct 126 ms 141228 KB Output is correct
5 Correct 124 ms 141276 KB Output is correct
6 Correct 124 ms 141276 KB Output is correct
7 Correct 111 ms 141584 KB Output is correct
8 Correct 122 ms 141548 KB Output is correct
9 Correct 114 ms 141800 KB Output is correct
10 Incorrect 133 ms 141660 KB Output isn't correct