답안 #890220

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
890220 2023-12-20T16:59:38 Z cpptowin Uzastopni (COCI15_uzastopni) C++17
160 / 160
344 ms 19284 KB
#include<bits/stdc++.h>
#define fo(i,d,c) for(int i=d;i<=c;i++)
#define fod(i,c,d) for(int i=c;i>=d;i--)
#define maxn 10010
#define N 1010
#define fi first
#define se second
#define pb emplace_back
#define en cout<<"\n";
#define inf 1000000000
#define pii pair<int,int>
#define vii vector<pii>
#define lb(x) x&-x
#define bit(i,j) ((i>>j)&1)
#define offbit(i,j) (i^(1<<j))
#define onbit(i,j) (i|(1<<j))
#define vi vector<int>
template <typename T1, typename T2> bool minimize(T1 &a, T2 b){if (a > b) {a = b; return true;} return false;}
template <typename T1, typename T2> bool maximize(T1 &a, T2 b){if (a < b) {a = b; return true;} return false;}
using namespace std;
bitset<105> dp[10010][110];
vi ke[maxn];
int v[maxn];
int n;
    bitset<105> f[110];
void dfs(int u)
{
    for(int v : ke[u]) dfs(v);
    fo(i,1,100) f[i].reset();
    f[v[u]][v[u]] = 1;
    for(int v : ke[u])
    {
        fo(i,1,100) f[i] |= dp[v][i];
    }
    fo(i,1,100) fo(j,1,100) if(f[i][j]) f[i] |= f[j + 1];
    dp[u][v[u]][v[u]] = 1;
    fo(i,1,100) fo(j,1,100)
    {
        if(f[i + 1][j] and i == v[u]) dp[u][i][j] = 1;
        if(f[i][j - 1] and j == v[u]) dp[u][i][j] = 1;
        if(f[i][v[u] - 1] and f[v[u] + 1][j]) dp[u][i][j] = 1;
    }
}
main()
{
    #define name "TASK"
    if(fopen(name".inp","r"))
    {
       freopen(name".inp","r",stdin);
       freopen(name".out","w",stdout);
    }
    ios_base::sync_with_stdio(false);cin.tie(NULL);
    cin >> n;
    fo(i,1,n) cin >> v[i];
    fo(i,1,n - 1)
    {
        int u,v;
        cin >> u >> v;
        ke[u].pb(v);
    }
    dfs(1);
    int ans = 0;
    fo(i,1,100) ans += dp[1][i].count();
    cout << ans;
}

Compilation message

uzastopni.cpp:44:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   44 | main()
      | ^~~~
uzastopni.cpp: In function 'int main()':
uzastopni.cpp:49:15: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   49 |        freopen(name".inp","r",stdin);
      |        ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
uzastopni.cpp:50:15: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   50 |        freopen(name".out","w",stdout);
      |        ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 2396 KB Output is correct
2 Correct 3 ms 2652 KB Output is correct
3 Correct 3 ms 2652 KB Output is correct
4 Correct 3 ms 2652 KB Output is correct
5 Correct 3 ms 2652 KB Output is correct
6 Correct 3 ms 2648 KB Output is correct
7 Correct 3 ms 2652 KB Output is correct
8 Correct 3 ms 2656 KB Output is correct
9 Correct 3 ms 2652 KB Output is correct
10 Correct 3 ms 2652 KB Output is correct
11 Correct 295 ms 18176 KB Output is correct
12 Correct 270 ms 17940 KB Output is correct
13 Correct 276 ms 17848 KB Output is correct
14 Correct 271 ms 18920 KB Output is correct
15 Correct 294 ms 19284 KB Output is correct
16 Correct 277 ms 19028 KB Output is correct
17 Correct 273 ms 17928 KB Output is correct
18 Correct 344 ms 18284 KB Output is correct
19 Correct 268 ms 17864 KB Output is correct
20 Correct 264 ms 18004 KB Output is correct