QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#736023 | #7415. Fast Spanning Tree | wsc2008 | WA | 7ms | 40980kb | C++14 | 2.3kb | 2024-11-11 23:38:22 | 2024-11-11 23:38:23 |
Judging History
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];
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]);
}
void Remake(ll y){
while(!q[y].empty()&&q[y].top()[0]-tag[y]<=0){
array<ll,3> p=q[y].top();q[y].pop();
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;
ll mid=(S[id]-tag[fx]-tag[fy]+1)/2;
q[fx].push({mid,S[id],id});
q[fy].push({mid,S[id],id});
rS[id]=mid;
}
}
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);
tag[y]+=tag[x];
while(!q[x].empty()){
array<ll,3> p=q[x].top();q[x].pop();
q[y].push({p[0],p[1],p[2]});
}
PQ().swap(q[x]),sz[y]+=sz[x],fa[x]=y,tag[x]=0;
return Remake(y),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;
}
詳細信息
Test #1:
score: 100
Accepted
time: 7ms
memory: 40980kb
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: 0ms
memory: 40324kb
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: 7ms
memory: 40120kb
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: 3ms
memory: 40100kb
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: -100
Wrong Answer
time: 3ms
memory: 39136kb
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 42 44 45 46 47 48 49 50 51 52 53 34 54 55 56 58 59 60 61 62 63 64 41 66 67 68 69 70 71 72 74 76 78 80 81 82 87 89 91 94 95 96 100 101 24 84 103 107 109 110 117 119 129 142 144 169 170 195
result:
wrong answer 40th numbers differ - expected: '41', found: '42'