답안 #376659

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
376659 2021-03-12T00:12:13 Z daniel920712 Designated Cities (JOI19_designated_cities) C++14
13 / 100
621 ms 92396 KB
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <map>
#include <set>

using namespace std;
vector < pair < long long , long long > > Next[200005];
map < long long , long long > all[200005];
set < long long > vis[200005];
long long ans[200005];
long long xx[200005];
long long how[200005];
long long N=0;
pair < long long , long long > A,B;
void F(long long here,long long fa)
{
    for(auto i:Next[here])
    {
        if(i.first!=fa)
        {
            ans[1]+=i.second;
            F(i.first,here);
        }
    }
}
void F2(long long here,long long fa)
{
    for(auto i:Next[here])
    {
        if(i.first!=fa)
        {
            ans[i.first]=ans[here]-all[here][i.first]+all[i.first][here];
            F2(i.first,here);
        }
    }
}
void F3(long long here,long long fa)
{
    for(auto i:Next[here])
    {
        if(i.first!=fa)
        {
            vis[here].insert(i.first);
            F3(i.first,here);
        }
    }
}
pair < long long , long long > F4(long long here,long long fa,long long con)
{
    pair < long long , long long > a=make_pair(0,here),b=make_pair(0,here),tt;
    for(auto i:Next[here])
    {
        if(i.first!=fa)
        {
            tt=F4(i.first,here,con+i.second);
            if(tt>a)
            {
                b=a;
                a=tt;
            }
            else if(tt>b)
            {
                b=tt;
            }
        }
    }
    A=a;
    B=b;
    return a;
}

int main()
{
    long long M,i,j,k,a,b,c,d,where;
    scanf("%lld",&N);

    for(i=1;i<N;i++)
    {

        scanf("%lld %lld %lld %lld",&a,&b,&c,&d);
        Next[a].push_back(make_pair(b,c));
        Next[b].push_back(make_pair(a,d));
        all[a][b]=c;
        all[b][a]=d;
    }
    for(i=1;i<=N;i++) xx[i]=1e18;
    if(N<=16)
    {
        for(i=0;i<(1<<N);i++)
        {
            a=0;
            b=0;
            for(j=1;j<=N;j++) vis[j].clear();
            for(j=0;j<N;j++)
            {
                if(i&(1<<j))
                {
                    F3(j+1,-1);
                    a++;
                }
            }
            for(j=1;j<=N;j++) for(auto k:Next[j]) if(vis[j].find(k.first)==vis[j].end()) b+=all[k.first][j];
            xx[a]=min(xx[a],b);
        }
        scanf("%lld",&M);
        while(M--)
        {
            scanf("%lld",&a);
            printf("%lld\n",xx[a]);
        }
    }
    else
    {
        F(1,-1);
        F2(1,-1);
        how[1]=1e18;
        for(i=1;i<=N;i++)
        {
            how[1]=min(how[1],ans[i]);
            if(how[1]==ans[i]) where=i;
        }

        F4(1,-1,0);
        how[2]=how[1]-A.first-B.first;
        scanf("%lld",&M);
        while(M--)
        {
            scanf("%lld",&a);
            printf("%lld\n",how[a]);
        }


    }

    return 0;
}

Compilation message

designated_cities.cpp: In function 'int main()':
designated_cities.cpp:76:21: warning: unused variable 'k' [-Wunused-variable]
   76 |     long long M,i,j,k,a,b,c,d,where;
      |                     ^
designated_cities.cpp:76:31: warning: variable 'where' set but not used [-Wunused-but-set-variable]
   76 |     long long M,i,j,k,a,b,c,d,where;
      |                               ^~~~~
designated_cities.cpp:77:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   77 |     scanf("%lld",&N);
      |     ~~~~~^~~~~~~~~~~
designated_cities.cpp:82:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   82 |         scanf("%lld %lld %lld %lld",&a,&b,&c,&d);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
designated_cities.cpp:107:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  107 |         scanf("%lld",&M);
      |         ~~~~~^~~~~~~~~~~
designated_cities.cpp:110:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  110 |             scanf("%lld",&a);
      |             ~~~~~^~~~~~~~~~~
designated_cities.cpp:127:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  127 |         scanf("%lld",&M);
      |         ~~~~~^~~~~~~~~~~
designated_cities.cpp:130:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  130 |             scanf("%lld",&a);
      |             ~~~~~^~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 16 ms 23788 KB Output is correct
2 Correct 203 ms 23788 KB Output is correct
3 Correct 182 ms 23788 KB Output is correct
4 Correct 213 ms 24044 KB Output is correct
5 Correct 209 ms 23788 KB Output is correct
6 Correct 195 ms 23788 KB Output is correct
7 Correct 190 ms 24044 KB Output is correct
8 Correct 220 ms 23916 KB Output is correct
9 Correct 194 ms 23916 KB Output is correct
10 Correct 181 ms 23788 KB Output is correct
11 Correct 212 ms 23916 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 16 ms 23788 KB Output is correct
2 Correct 501 ms 68716 KB Output is correct
3 Correct 545 ms 91596 KB Output is correct
4 Correct 501 ms 67180 KB Output is correct
5 Correct 532 ms 68644 KB Output is correct
6 Correct 503 ms 71916 KB Output is correct
7 Correct 578 ms 68060 KB Output is correct
8 Correct 540 ms 92396 KB Output is correct
9 Correct 621 ms 67924 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 16 ms 23788 KB Output is correct
2 Incorrect 502 ms 68640 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 16 ms 23788 KB Output is correct
2 Correct 203 ms 23788 KB Output is correct
3 Correct 182 ms 23788 KB Output is correct
4 Correct 213 ms 24044 KB Output is correct
5 Correct 209 ms 23788 KB Output is correct
6 Correct 195 ms 23788 KB Output is correct
7 Correct 190 ms 24044 KB Output is correct
8 Correct 220 ms 23916 KB Output is correct
9 Correct 194 ms 23916 KB Output is correct
10 Correct 181 ms 23788 KB Output is correct
11 Correct 212 ms 23916 KB Output is correct
12 Correct 16 ms 23788 KB Output is correct
13 Incorrect 19 ms 24300 KB Output isn't correct
14 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 16 ms 23788 KB Output is correct
2 Correct 501 ms 68716 KB Output is correct
3 Correct 545 ms 91596 KB Output is correct
4 Correct 501 ms 67180 KB Output is correct
5 Correct 532 ms 68644 KB Output is correct
6 Correct 503 ms 71916 KB Output is correct
7 Correct 578 ms 68060 KB Output is correct
8 Correct 540 ms 92396 KB Output is correct
9 Correct 621 ms 67924 KB Output is correct
10 Correct 16 ms 23788 KB Output is correct
11 Incorrect 502 ms 68640 KB Output isn't correct
12 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 16 ms 23788 KB Output is correct
2 Correct 203 ms 23788 KB Output is correct
3 Correct 182 ms 23788 KB Output is correct
4 Correct 213 ms 24044 KB Output is correct
5 Correct 209 ms 23788 KB Output is correct
6 Correct 195 ms 23788 KB Output is correct
7 Correct 190 ms 24044 KB Output is correct
8 Correct 220 ms 23916 KB Output is correct
9 Correct 194 ms 23916 KB Output is correct
10 Correct 181 ms 23788 KB Output is correct
11 Correct 212 ms 23916 KB Output is correct
12 Correct 16 ms 23788 KB Output is correct
13 Correct 501 ms 68716 KB Output is correct
14 Correct 545 ms 91596 KB Output is correct
15 Correct 501 ms 67180 KB Output is correct
16 Correct 532 ms 68644 KB Output is correct
17 Correct 503 ms 71916 KB Output is correct
18 Correct 578 ms 68060 KB Output is correct
19 Correct 540 ms 92396 KB Output is correct
20 Correct 621 ms 67924 KB Output is correct
21 Correct 16 ms 23788 KB Output is correct
22 Incorrect 502 ms 68640 KB Output isn't correct
23 Halted 0 ms 0 KB -