QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#182223 | #1293. Date Pickup | manizare | WA | 3ms | 29928kb | C++14 | 3.4kb | 2023-09-17 14:41:35 | 2023-09-17 14:41:36 |
Judging History
answer
#include <bits/stdc++.h>
#pragma GCC optimize("O3,unroll-loops")
#define pb push_back
#define F first
#define S second
#define all(a) a.begin(),a.end()
#define pii pair <int,int>
#define Pii pair< pii , pii >
#define int long long
using namespace std ;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const int maxn = 3e5 + 10 , sq = 707 , maxq = 1e7 + 1 , inf = 1e18 + 10 , mod= 1e9 + 7 ;
int a , b , n , m ;
vector <pii> G[maxn] , G_[maxn];
int dis1[maxn] , disn[maxn] , ok[maxn],ok2[maxn] , dor[maxn] , ans =0 ,mark[maxn] ;
void dfs(int v ,int x){
mark[v] = 1;ok2[v] = 1;
for(int i =0 ; i < G[v].size() ; i++){
int u = G[v][i].F , w = G[v][i].S ;
if(mark[u] == 1)continue ;
if(ok2[u] == 0 && disn[u]+w > x)continue ;
dfs(u , x) ;
}
}
void dfs2(int v ,int x){
mark[v ] =2 ;
for(int i =0 ; i < G[v].size() ; i++){
int u = G[v][i].F , w = G[v][i].S ;
if(disn[u]+w > x || ok[u] == 0||ok2[u] == 0){
continue ;
}
if(mark[u] == 2){
ans = 1;
}
if(mark[u] == 0){
dfs2(u,x);
}
dor[v] = max(dor[v] , dor[u]+w);
}
mark[v] = 1 ;
}
bool ch(int x){
ans =0 ;
for(int i = 1; i <= n ; i++){
mark[i] = ok[i] = ok2[i] = dor[i]=0;
}
for(int i = 1; i <= n ; i++){
if(disn[i] <= x){
ok[i] = 1;
}
}
for(int i =1 ; i <= n ; i++){
if(ok[i] == 0)continue ;
if(dis1[i] <= a){
ok2[i] = 1;
}
for(int j =0 ;j < G_[i].size() ; j++){
int v =G_[i][j].F , w = G_[i][j].S ;
if(ok[v] == 0 && dis1[v] + w - (x-disn[i]) <= a)ok2[i]= 1;
}
if(ok2[i] == 1 && mark[i] == 0){
dfs(i , x);
}
}
for(int i =1 ; i <= n ; i++)mark[i] = 0;
for(int i = 1; i <= n ; i++){
if(mark[i] == 0 && ok[i] && ok2[i]){
dfs2(i , x) ;
}
}
for(int i = 1; i <= n ; i++){
int mx =-inf ;
if(ok2[i] == 0 || ok[i] ==0)continue ;
if(dis1[i] <= a)mx =0 ;
for(int j =0 ;j < G_[i].size() ; j++){
int v =G_[i][j].F , w = G_[i][j].S ;
if(ok[v]==0)mx = max(mx , x-disn[i]);
}
dor[i] += mx ;
if(dor[i]+a >= b)ans = 1;
}
return ans ;
}
signed main(){
ios::sync_with_stdio(false); cin.tie(0) ;
cin >> a >> b;
cin >> n >> m ;
for(int i = 1; i <= m ; i++){
int v , u , w ;
cin >> v >> u >> w ;
G[v].pb({u , w}) ;
G_[u].pb({v , w}) ;
}
for(int i =1 ; i <= n ; i++){
dis1[i] = inf ;
}
priority_queue<pii> pq ;
dis1[1] = 0 ;
pq.push({0 , 1}) ;
while(pq.size()){
int v = pq.top().S ; pq.pop();
if(mark[v] == 1)continue ;
mark[v ]= 1;
for(int i =0 ; i <G[v].size() ; i++){
int u = G[v][i].F , w = G[v][i].S ;
if(dis1[u] > dis1[v] + w){
dis1[u] = dis1[v] + w ;
pq.push({-dis1[u] , u}) ;
}
}
}
for(int i =1 ;i <= n ;i++){
mark[i] =0 ;
disn[i] = inf ;
}
disn[n] = 0 ;
pq.push({0 , n}) ;
while(pq.size()){
int v = pq.top().S ; pq.pop();
if(mark[v] == 1)continue ;
mark[v ]= 1;
for(int i =0 ; i <G_[v].size() ; i++){
int u = G_[v][i].F , w = G_[v][i].S ;
if(disn[u] > disn[v] + w){
disn[u] = disn[v] + w ;
pq.push({-disn[u] , u}) ;
}
}
}
int l = -1 , r = inf ;
while(r-l>1){
int mid = (l+r)/2 ;
if(ch(mid) == 1){
r = mid ;
}else{
l = mid ;
}
}
cout << r ;
}
/*
*/
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 29732kb
input:
60 142 3 9 1 1 173 1 2 124 1 3 97 2 1 70 2 2 19 2 3 46 3 1 176 3 2 199 3 3 88
output:
82
result:
ok single line: '82'
Test #2:
score: 0
Accepted
time: 3ms
memory: 29928kb
input:
0 0 3 4 1 2 7 2 3 5 1 3 3 3 3 1
output:
3
result:
ok single line: '3'
Test #3:
score: 0
Accepted
time: 0ms
memory: 28416kb
input:
28 40 10 13 2 5 4 5 8 7 4 10 10 8 6 7 5 8 10 10 7 7 9 1 4 2 4 5 1 8 2 3 2 6 4 5 1 6 3 4 7 1 5
output:
12
result:
ok single line: '12'
Test #4:
score: 0
Accepted
time: 3ms
memory: 29908kb
input:
5 76 7 9 3 4 8 7 1 6 5 4 9 3 7 4 1 6 2 4 3 9 2 5 2 6 5 8 7 2 6
output:
27
result:
ok single line: '27'
Test #5:
score: 0
Accepted
time: 3ms
memory: 28912kb
input:
15 114 5 6 2 5 5 3 2 10 5 4 2 4 2 10 1 1 9 1 3 7
output:
17
result:
ok single line: '17'
Test #6:
score: 0
Accepted
time: 3ms
memory: 29336kb
input:
0 81 10 18 8 3 3 5 6 5 10 1 1 4 7 6 2 8 2 9 6 7 3 5 3 8 4 10 7 3 8 6 10 2 6 10 10 3 5 9 3 4 8 10 2 3 7 5 8 9 6 10 10 4 10 1 2 5
output:
20
result:
ok single line: '20'
Test #7:
score: -100
Wrong Answer
time: 3ms
memory: 28280kb
input:
1 76 6 19 4 2 3 1 2 6 5 3 6 3 1 7 4 6 9 5 4 4 3 1 3 3 6 7 2 6 1 2 4 4 6 3 10 1 1 6 2 5 7 1 2 6 1 5 8 5 2 7 1 3 5 5 4 2 2 6 4
output:
8
result:
wrong answer 1st lines differ - expected: '7', found: '8'