제출 #1200650

#제출 시각아이디문제언어결과실행 시간메모리
1200650kimTwo Transportations (JOI19_transportations)C++20
0 / 100
154 ms13692 KiB
#include "Azer.h" #include<bits/stdc++.h> using namespace std; using ll=long long; using pii=pair<int,int>; #define f first #define s second #define eb emplace_back #define sz(x) (int)x.size() #define add(x,y) ((((x)+(y))%md+md)%md) #define Add(x,y) (x=add(x,y)) #define mul(x,y) ((((x)*(y))%md+md)%md) #define Mul(x,y) (x=mul(x,y)) namespace { template<class T> T chmn(T &x,T y){ return x=min(x,y); } template<class T> T chmx(T &x,T y){ return x=max(x,y); } const int inf=1e9; const ll linf=1e18; const ll md=1e9+7; // const ll md=119<<23|1; vector<pii> adj[2005]; priority_queue<pii,vector<pii>,greater<pii>> pq; int d[2005],d0[2005]; vector<pii> tmp; ll m,m0,cnt,n; void send(bool x){ return SendA(x); } void push(){ for(int i=0;i<n;++i) if(d[i]<d0[i]) tmp.eb(d0[i]=d[i], i); } void play(){ push(); int n=sz(tmp); for(int i=0;i<11;++i) send(n&1), n>>=1; for(auto &[w,v]:tmp){ int x=w*2000+v; for(int i=0;i<31;++i) send(x&1), x>>=1; } tmp.clear(); } void dijk(){ while(!pq.empty()){ auto [w,u] = pq.top(); pq.pop(); if(d[u]!=w) continue; for(auto &[v,vw]:adj[u]) if(d[v]>w+vw) pq.emplace(d[v]=w+vw,v); } } } // namespace void InitA(int N, int A, std::vector<int> U, std::vector<int> V, std::vector<int> C) { n=N; for(int i=0;i<A;++i) adj[U[i]].eb(V[i],C[i]), adj[V[i]].eb(U[i],C[i]); m=m0=cnt=0; fill(d+1,d+N,inf); fill(d0+1,d0+N,inf); pq.emplace(0,0); dijk(); play(); } void ReceiveA(bool x) { if(!m){ m0 |= x<<cnt; if(++cnt==11){ m=m0, m0=cnt=0; if(m==0){ dijk(); bool ok=0; for(int i=0;!ok&&i<n;++i) if(d[i]<d0[i]) ok=1; if(!ok) return; play(); } } return; } m0 |= x<<cnt; if(++cnt==31){ int w=m0/2000, v=m0%2000; if(d[v]>w) pq.emplace(d[v]=d0[v]=w,v); m0=cnt=0; if(--m==0){ dijk(); play(); } } } std::vector<int> Answer() { vector<int> ans(n); for(int i=0;i<n;++i) ans[i]=d[i]; return ans; }
#include "Baijan.h" #include<bits/stdc++.h> using namespace std; using ll=long long; using pii=pair<int,int>; #define f first #define s second #define eb emplace_back #define sz(x) (int)x.size() #define add(x,y) ((((x)+(y))%md+md)%md) #define Add(x,y) (x=add(x,y)) #define mul(x,y) ((((x)*(y))%md+md)%md) #define Mul(x,y) (x=mul(x,y)) template<class T> T chmn(T &x,T y){ return x=min(x,y); } template<class T> T chmx(T &x,T y){ return x=max(x,y); } const int inf=1e9; const ll linf=1e18; const ll md=1e9+7; // const ll md=119<<23|1; namespace { vector<pii> adj[2005]; priority_queue<pii,vector<pii>,greater<pii>> pq; int d[2005],d0[2005]; vector<pii> tmp; ll m,m0,cnt,n; void send(bool x){ return SendB(x); } void push(){ for(int i=0;i<n;++i) if(d[i]<d0[i]) tmp.eb(d0[i]=d[i], i); } void play(){ push(); int n=sz(tmp); for(int i=0;i<11;++i) send(n&1), n>>=1; for(auto &[w,v]:tmp){ int x=w*2000+v; for(int i=0;i<31;++i) send(x&1), x>>=1; } tmp.clear(); } void dijk(){ while(!pq.empty()){ auto [w,u] = pq.top(); pq.pop(); if(d[u]!=w) continue; for(auto &[v,vw]:adj[u]) if(d[v]>w+vw) pq.emplace(d[v]=w+vw,v); } } } // namespace void InitB(int N, int A, std::vector<int> U, std::vector<int> V, std::vector<int> C) { n=N; for(int i=0;i<A;++i) adj[U[i]].eb(V[i],C[i]), adj[V[i]].eb(U[i],C[i]); m=m0=cnt=0; fill(d+1,d+N,inf); fill(d0+1,d0+N,inf); pq.emplace(0,0); dijk(); } void ReceiveB(bool x) { if(!m){ m0 |= x<<cnt; if(++cnt==11){ m=m0, m0=cnt=0; if(m==0){ dijk(); bool ok=0; for(int i=0;!ok&&i<n;++i) if(d[i]<d0[i]) ok=1; if(!ok) return; play(); } } return; } m0 |= x<<cnt; if(++cnt==31){ int w=m0/2000, v=m0%2000; if(d[v]>w) pq.emplace(d[v]=d0[v]=w,v); m0=cnt=0; if(--m==0){ dijk(); play(); } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...