Submission #81602

# Submission time Handle Problem Language Result Execution time Memory
81602 2018-10-25T14:33:08 Z ToadDaveski Evacuation plan (IZhO18_plan) C++11
0 / 100
1202 ms 36900 KB
#include <bits/stdc++.h>
#define ll int
#define fr first
#define sc second
using namespace std;
vector <pair <ll,ll> > v[100001];
ll dp[100001],us[100001],pr[100001];
unordered_set <ll> an[100001];
ll ans[100001];
priority_queue <pair <ll,ll> > q;
vector <pair <ll,pair <ll,ll> > > edges;
ll dfs(ll x,ll y)
{
    us[x]=-1;
    if (x==y) return us[x]=dp[y];
    ll ans=0;
    for(auto to : v[x])
    {
        if (us[to.fr]==0)
            dfs(to.fr,y);
        if (us[to.fr]>0)
            ans=max(ans,us[to.fr]);
    }
    return us[x]=min(ans,dp[x]);
}
bool cmp (pair <ll,ll> a, pair <ll,ll> b)
{
    if (a.sc>=b.sc)
        return 1;
    return 0;
}
ll f(ll x)
{
    if (pr[x]==x) return x;
    else return pr[x]=f(pr[x]);
}
int main()
{
    //ios_base::sync_with_stdio(0);
    ll n,m,Q,k,i,j;
    cin>>n>>m;
    //cout<<3<<endl;
    for(i=1;i<=n;i++)
        dp[i]=1e9;
    for(i=1;i<=m;i++)
    {
        ll x,y,z;
        cin>>x>>y>>z;
        v[x].push_back({y,z});
        v[y].push_back({x,z});
    }
    cin>>k;
    for(i=1;i<=k;i++)
    {
        ll x,y;
        cin>>x;
        q.push({0,x});
        dp[x]=0;
    }
    //cout<<3<<endl;
    while(!q.empty())
    {
        ll from=q.top().sc;
        ll weight=-q.top().fr;
        q.pop();
        if (dp[from]<weight)
            continue;
        for(auto to : v[from])
        {
            if (dp[to.fr]>dp[from]+to.sc)
            {
                dp[to.fr]=dp[from]+to.sc;
                q.push({-(dp[from]+to.sc),to.fr});
            }
        }
    }
    //cout<<3<<endl;
    cin>>Q;
    for(i=1;i<=Q;i++)
    {
        ll x,y;
        scanf("%d%d", &x, &y);
        an[x].insert(i);
        an[y].insert(i);
    }
    for(i=1;i<=n;i++)
    {
        pr[i]=i;
        for(auto to : v[i])
        {
            edges.push_back({min(dp[to.fr],dp[i]),{i,to.fr}});
        }
    }
    //cout<<edges.size()<<endl;
   sort(edges.begin(),edges.end());
   //cout<<3<<endl;
    for(i=edges.size()-1;i>=0;i--)
    {
        //cout<<i<<endl;
        ll a=f(edges[i].sc.fr);
        ll b=f(edges[i].sc.sc);
        if (a==b) continue;
        if (an[a].size()<an[b].size())
            swap(a,b);
        for(const int& tod : an[b])
        {
            if (an[a].count(tod))
            {
                ans[tod]=edges[i].fr;
                an[a].erase(tod);
                an[b].erase(tod);
            }
            else
            {
                an[a].insert(tod);
            }
        }
        pr[b]=a;
    }
    for(i=1;i<=Q;i++)
        printf("%d\n", ans[i]);
    return 0;
}
/*
9 12
1 9 4
1 2 5
2 3 7
2 4 3
4 3 6
3 6 4
8 7 10
6 7 5
5 8 1
9 5 7
5 4 12
6 8 2
2
4 7
5
1 6
5 3
4 8
5 8
1 5

*/

Compilation message

plan.cpp: In function 'int main()':
plan.cpp:55:14: warning: unused variable 'y' [-Wunused-variable]
         ll x,y;
              ^
plan.cpp:40:18: warning: unused variable 'j' [-Wunused-variable]
     ll n,m,Q,k,i,j;
                  ^
plan.cpp:82:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d%d", &x, &y);
         ~~~~~^~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Incorrect 9 ms 8156 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 9 ms 8156 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 19 ms 16376 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 490 ms 22272 KB Output is correct
2 Correct 1192 ms 36772 KB Output is correct
3 Correct 1202 ms 36900 KB Output is correct
4 Runtime error 232 ms 29416 KB Execution killed with signal 11 (could be triggered by violating memory limits)
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 9 ms 8156 KB Output isn't correct
2 Halted 0 ms 0 KB -