제출 #1278885

#제출 시각아이디문제언어결과실행 시간메모리
1278885longdeptraiRobot (JOI21_ho_t4)C++20
0 / 100
768 ms103448 KiB
#include <bits/stdc++.h> //#include <ext/pb_ds/assoc_container.hpp> //#include <ext/pb_ds/tree_policy.hpp> using namespace std; //using namespace __gnu_pbds; #define LongDepTrai "robot" #define ll long long #define int long long #define ull unsigned long long #define ld long double #define ii pair<int,int> #define iii pair<int,ii> #define iv pair<ii,ii> #define pll pair<ll,ll> #define vi vector<int> #define vii vector<ii> #define vll vector<ll> #define fi first #define se second #define pb push_back #define all(x) (x).begin(), (x).end() #define sz(x) int((x).size()) #define order_set(T) tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update> inline ll add(ll a, ll b, ll mod){ a += b; if(a >= mod) a -= mod; return a; } inline ll sub(ll a, ll b, ll mod){ a -= b; if(a < 0) a += mod; return a; } inline ll mul(ll a, ll b, ll mod){ return ( (ll)a * b ) % mod; } static mt19937_64 rng((unsigned)chrono::steady_clock::now().time_since_epoch().count()); const int N=1e6+9; const int INF=1e18; int n,m,c[N],p[N],cnt=0,sum[N],f[N]; vii g[N]; map<int,int> mp[N]; int idx(int u,int c){ if(u>n) return u; if(mp[u][c]==0) mp[u][c]=(++cnt); return mp[u][c]; } void dijk(int u){ for(int i=1;i<=cnt;i++){ f[i]=INF; } f[u]=0; priority_queue<ii,vector<ii>,greater<ii>> q; q.push({f[u],u}); while(q.size()) { int z=q.top().se; int val=q.top().fi; q.pop(); if(val!=f[z]) continue; for(ii x:g[z]){ int v=x.fi; int id=x.se; if(f[v]>f[z]+sum[idx(z,c[id])]-p[id]){ f[v]=f[z]+sum[idx(z,c[id])]-p[id]; q.push({f[v],v}); } if(z>n) continue; if(f[v]>f[z]+p[id]){ f[v]=f[z]+p[id]; q.push({f[v],v}); } if(f[idx(v,c[id])]>val){ f[idx(v,c[id])]=val; q.push({f[idx(v,c[id])],idx(v,c[id])}); } } } } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0);cout.tie(0); if(fopen(LongDepTrai".inp","r")){ freopen(LongDepTrai".inp","r",stdin); freopen(LongDepTrai".out","w",stdout); } cin>>n>>m; cnt=n; for(int i=1;i<=m;i++){ int u,v,col,cost; cin>>u>>v>>col>>cost; c[i]=col; p[i]=cost; g[u].pb({v,i}); g[v].pb({u,i}); // cout<<u<<" "<<v<<"\n"; // cout<<v<<" "<<u<<"\n"; sum[idx(v,col)]+=p[i]; g[idx(v,col)].pb({u,i}); // cout<<idx(v,col)<<" "<<u<<"\n"; sum[idx(u,col)]+=p[i]; g[idx(u,col)].pb({v,i}); // cout<<idx(u,col)<<" "<<v<<"\n"; } dijk(1); cout<<f[n]; return 0; }

컴파일 시 표준 에러 (stderr) 메시지

Main.cpp: In function 'int main()':
Main.cpp:80:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   80 |         freopen(LongDepTrai".inp","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:81:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   81 |         freopen(LongDepTrai".out","w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...