제출 #1316789

#제출 시각아이디문제언어결과실행 시간메모리
1316789athenaGrapevine (NOI22_grapevine)C++20
0 / 100
3094 ms15512 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int void bfs(vector<vector<pair<int,int>>>&adj,int n,int s,vector<int>&dis,vector<bool>&vis,vector<int>&p,vector<vector<int>>&c) { queue<pair<int,int>>q; q.push({s,0}); while(!q.empty()) { auto [y,w]=q.front();q.pop(); vis[y]=1; for(auto [u,v]:adj[y]) { if(!vis[u]) { p[u]=y; c[y].push_back(u); dis[u]=dis[y]+v; q.push({u,v}); } } } } int32_t main(){ int n,q; cin>>n>>q; vector<vector<pair<int,int>>>adj(n+1); for(int i=0;i<n-1;i++) { int x,y,w; cin>>x>>y>>w; adj[x].push_back({y,w}); adj[y].push_back({x,w}); } vector<int>dis(n+1); vector<bool>vis(n+1,false); vector<int>p(n+1); vector<int>gpe(n+1,0); vector<vector<int>>c(n+1); // vis.assign(n+1,0); // dis.assign(n+1,0); bfs(adj,n,1,dis,vis,p,c); // for(int i=1;i<=n;i++) // cout<<dis[i]<<" "; // cout<<endl; // for(int i=1;i<=n;i++) // cout<<c[i]<<" "; while(q--) { int t; cin>>t; if(t==1)//seek {int s; cin>>s; int ans=1e18; for(int i=1;i<=n;i++) { if(gpe[i]==1) { ans=min(ans,dis[i]); } } if(ans==1e18) cout<<-1<<endl; else cout<<ans<<endl; } if(t==2) { int x; cin>>x; if(gpe[x]==1) gpe[x]=0; else gpe[x]=1; } if(t==3) { int x,y,w; cin>>x>>y>>w; if(p[x]==y)//y parent {long long old_w = dis[x] - dis[y]; long long delta = w - old_w; queue<int> qq; qq.push(x); while(!qq.empty()){ int v = qq.front(); qq.pop(); dis[v] += delta; for(int u: c[v]) qq.push(u); } } else//x parent {long long old_w = dis[y] - dis[x]; long long delta = w - old_w; queue<int> qq; qq.push(y); while(!qq.empty()){ int v = qq.front(); qq.pop(); dis[v] += delta; for(int u: c[v]) qq.push(u); } } // cout<<"NEW "<<endl; // for(int i=1;i<=n;i++) //cout<<dis[i]<<" "; // cout<<endl; } } return 0; }
#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...