QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#182223#1293. Date PickupmanizareWA 3ms29928kbC++143.4kb2023-09-17 14:41:352023-09-17 14:41:36

Judging History

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

  • [2023-09-17 14:41:36]
  • 评测
  • 测评结果:WA
  • 用时:3ms
  • 内存:29928kb
  • [2023-09-17 14:41:35]
  • 提交

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 ;
}
/*

*/

Details

Tip: Click on the bar to expand more detailed information

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'