QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#736050#7415. Fast Spanning Treewsc2008WA 5ms40980kbC++142.6kb2024-11-11 23:52:022024-11-11 23:52:03

Judging History

你现在查看的是最新测评结果

  • [2024-11-11 23:52:03]
  • 评测
  • 测评结果:WA
  • 用时:5ms
  • 内存:40980kb
  • [2024-11-11 23:52:02]
  • 提交

answer

#include<bits/stdc++.h>
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
#define pii pair<ll,ll>
#define rep(i,a,b) for(ll i=(a);i<=(b);++i)
#define per(i,a,b) for(ll i=(a);i>=(b);--i)
using namespace std;
bool Mbe;
ll read(){
    ll x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}
void write(ll x){
    if(x<0)putchar('-'),x=-x;
    if(x>9)write(x/10);
    putchar(x%10+'0');
}
#define PQ priority_queue<array<ll,3>,vector<array<ll,3> >,greater<array<ll,3> > >
const ll N=6e5+9;
ll n,m,W[N],A[N],B[N],S[N],rS[N],fa[N],sz[N],tag[N],psh[N],in[N];
PQ q[N];
priority_queue<ll,vector<ll>,greater<ll> >Q;
ll find(ll x){
    return fa[x]==x?x:fa[x]=find(fa[x]);
}
queue<ll>wq;
void Remake(ll y){
    in[y]=0;
    while(!q[y].empty()&&q[y].top()[0]-tag[y]<=0){
        array<ll,3> p=q[y].top();q[y].pop();
        // cout<<p[0]<<" "<<tag[y]<<" "<<p[1]<<" "<<p[2]<<" "<<rS[p[2]]<<endl;
        ll id=p[2],fx=find(A[id]),fy=find(B[id]);
        if(psh[id])continue;
        if(tag[fx]+tag[fy]>=S[id]){
            Q.push(id),psh[id]=1;
            continue;
        }
        if(rS[id]!=p[1]||fx==fy)continue;
        rS[id]=p[0];
        ll mid=(S[id]-tag[fx]-tag[fy]+1)/2;
        q[fx].push({mid+tag[fx],rS[id],id});
        q[fy].push({mid+tag[fy],rS[id],id});
        if(!in[fx])wq.push(fx),in[fx]=1;
        if(!in[fy])wq.push(fy),in[fy]=1;
    }
}
void Remake(){
    while(!wq.empty())Remake(wq.front()),wq.pop();
}
bool Unite(ll x,ll y){
    x=find(x),y=find(y);
    if(x==y)return 0;
    if(sz[x]>sz[y])swap(x,y);
    while(!q[x].empty()){
        array<ll,3> p=q[x].top();q[x].pop();
        q[y].push({p[0],p[1],p[2]});
    }
    tag[y]+=tag[x];
    PQ().swap(q[x]),sz[y]+=sz[x],fa[x]=y,tag[x]=0;
    return wq.push(y),in[y]=1,Remake(),1;
}
bool Med;
int main(){
    cerr<<fabs(&Med-&Mbe)/1048576.0<<"MB\n";
    n=read(),m=read();
    rep(i,1,n)W[i]=read(),fa[i]=i,sz[i]=1,tag[i]=W[i];
    rep(i,1,m)A[i]=read(),B[i]=read(),S[i]=read(),rS[i]=S[i];
    rep(i,1,m){
        if(W[A[i]]+W[B[i]]>=S[i])Q.push(i);
        else q[A[i]].push({(S[i]+1)/2,S[i],i}),q[B[i]].push({(S[i]+1)/2,S[i],i});
    }
    vector<ll>ans;
    while(!Q.empty()){
        ll i=Q.top();Q.pop();
        if(Unite(A[i],B[i]))ans.push_back(i);
    }
    write(ans.size()),putchar('\n');
    for(ll x:ans)write(x),putchar(' ');
    putchar('\n');
    cerr<<"\n"<<clock()*1.0/CLOCKS_PER_SEC*1000<<"ms\n";
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 4ms
memory: 39192kb

input:

5 5
1 4 3 4 0
4 5 5
3 1 1
2 5 2
4 3 1
4 1 4

output:

4
2 3 1 4 

result:

ok 5 number(s): "4 2 3 1 4"

Test #2:

score: 0
Accepted
time: 5ms
memory: 40980kb

input:

3 5
3 2 2
1 2 6
1 2 6
1 2 3
1 2 6
2 3 6

output:

2
3 5 

result:

ok 3 number(s): "2 3 5"

Test #3:

score: 0
Accepted
time: 4ms
memory: 39760kb

input:

10 20
4 6 6 1 7 9 1 8 7 9
5 3 2
1 10 10
5 6 7
9 6 9
3 1 1
6 8 1
5 7 0
9 5 4
10 3 4
8 6 8
3 10 6
5 3 8
3 7 9
1 9 10
10 1 0
5 7 6
6 10 1
6 5 9
5 8 2
9 2 4

output:

8
1 2 3 4 5 6 7 20 

result:

ok 9 numbers

Test #4:

score: 0
Accepted
time: 0ms
memory: 39700kb

input:

10 20
0 10 4 6 2 0 2 0 2 8
5 10 8
7 1 6
10 5 0
9 8 0
5 8 4
5 1 8
10 3 6
5 4 3
9 2 6
10 3 6
4 3 1
3 10 3
6 1 3
3 2 5
6 9 2
4 2 5
10 6 5
8 6 3
2 1 0
2 3 6

output:

9
1 4 5 6 2 7 8 9 13 

result:

ok 10 numbers

Test #5:

score: 0
Accepted
time: 4ms
memory: 39500kb

input:

100 200
49 21 70 93 66 51 36 59 56 62 10 4 46 73 22 48 89 17 72 60 29 64 19 56 32 54 55 0 77 86 34 35 56 17 55 2 98 80 73 71 64 37 61 22 89 96 99 28 0 35 56 45 74 81 30 3 66 96 28 16 29 43 60 61 60 95 83 5 73 1 28 47 73 44 8 4 91 34 100 23 4 93 44 87 72 5 13 88 100 52 56 61 100 80 14 30 59 97 51 43
...

output:

96
1 2 4 5 6 7 8 10 11 12 13 14 15 16 17 18 19 9 20 21 22 23 25 26 3 27 28 29 30 31 32 33 35 36 37 38 39 40 41 42 44 45 46 47 48 49 50 51 52 53 34 54 55 56 58 59 60 61 62 63 64 66 67 68 69 70 71 72 74 76 78 80 81 82 87 89 91 94 95 96 100 43 101 24 84 107 109 110 117 119 129 142 144 169 170 195 

result:

ok 97 numbers

Test #6:

score: 0
Accepted
time: 0ms
memory: 40792kb

input:

100 200
24 84 94 70 81 51 70 9 39 61 34 89 37 23 21 52 19 65 37 53 85 70 27 74 46 45 49 76 36 51 38 8 91 84 30 21 82 93 54 4 65 44 66 78 42 42 74 11 12 66 24 88 65 75 78 55 61 45 21 83 29 24 85 37 73 25 25 40 96 100 26 28 18 30 56 41 15 11 88 61 42 74 8 97 14 34 5 39 24 94 84 8 3 54 75 62 73 36 58 4...

output:

98
1 2 3 4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 11 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 63 64 65 66 67 68 70 71 72 73 74 75 77 78 80 81 82 84 85 87 88 89 90 91 92 94 96 98 99 103 104 129 156 163 164 167 185 199 

result:

ok 99 numbers

Test #7:

score: -100
Wrong Answer
time: 0ms
memory: 40332kb

input:

1000 2000
919 776 189 249 535 136 885 695 607 561 235 179 233 501 828 472 532 337 721 344 71 885 630 612 867 132 392 624 477 527 529 17 960 726 235 661 407 923 214 882 554 194 68 561 993 393 548 92 269 41 754 647 1 924 510 573 464 911 845 303 624 583 255 861 668 998 648 901 251 766 349 248 504 117 6...

output:

979
2 3 4 5 6 7 8 10 13 14 15 16 17 18 19 20 21 22 24 25 26 27 28 29 30 31 32 33 34 35 36 38 39 42 43 44 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 71 72 73 74 75 76 77 78 79 80 81 82 45 83 84 85 86 87 88 89 90 91 92 93 94 95 97 98 99 100 101 102 103 105 41 106 107 108 1...

result:

wrong answer 348th numbers differ - expected: '176', found: '365'