제출 #449484

#제출 시각아이디문제언어결과실행 시간메모리
449484MestuRobot (JOI21_ho_t4)C++14
0 / 100
687 ms54404 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define vi vector<int> #define pii pair<int, int> #define pll pair<ll, ll> #define vvi vector<vi> #define vll vector<ll> #define vvll vector<vector<ll>> #define vpii vector<pair<int,int>> #define vpll vector<pair<ll,ll>> #define vb vector<bool> #define vs vector<string> ///............x.........../// #define all(a) a.begin(), a.end() #define allr(a) a.rbegin(), a.rend() #define mp(a, b) make_pair(a, b) #define pb push_back #define ff first #define ss second #define bg begin() #define UNIQUE(X) (X).erase(unique(all(X)), (X).end()) #define ft cout << "for test"<<endl; #define read(v, a, n) for (int i = a; i<n; i++)cin>>v[i]; #define print(v) for (auto it : v)cout << it<<' ';cout << endl; #define PI acos(-1.0) #define yes cout <<"Yes"<< endl #define no cout<<"No"<<endl #define FIO ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define t_c int test, cs = 1;cin>>test;while (test--) #define casep cout<<"Case"<< cs++<<": "; ///................function...................../// #define D(a) (double)(a) #define sqr(a) (a * a) #define siz(s) (int)(s.size()) #define max3(a, b, c) max(a, max(b, c)) #define min3(a, b, c) min(a, min(b, c)) #define Min(a) *min_element(all(a)) ///#define mod 1000000007 ///.........Graph........./// int X[] = {1, -1, 0, 0}; int Y[] = {0, 0, 1, -1}; ///........constant......../// const ll N = 1e6+5; const ll inf = 1e17; int n,m; struct tp{ int node,color; ll changeCost; tp(int a, int b, int c){ node = a; color = b; changeCost = c; } }; map<pair<int,ll>,int>cnt; vector<vector<tp>>g(N); int main(){ FIO; cin>>n>>m; int a,b,c; ll p; for(int i=0; i<m; i++){ cin>>a>>b>>c>>p; g[a].pb(tp(b,c,p)); g[b].pb(tp(a,c,p)); cnt[mp(a,c)]++; cnt[mp(b,c)]++; } queue<int>q; q.push(1); vll Cost(n+1,inf),inqueue(n+1); Cost[1]=0; inqueue[1]=1; while(!q.empty()){ int u = q.front(); q.pop(); for(auto to:g[u]){ int color = to.color; int node = to.node; ll cost = Cost[u]+((cnt[mp(u,color)]>1)? to.changeCost:0ll); if(Cost[node]>cost){ Cost[node]=cost; if(!inqueue[node])q.push(node); } } } cout<<(Cost[n]==inf?-1:Cost[n])<<endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...