Submission #1316778

#TimeUsernameProblemLanguageResultExecution timeMemory
1316778athenaGrapevine (NOI22_grapevine)C++20
0 / 100
3094 ms12436 KiB
#include <bits/stdc++.h> using namespace std; 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}); } } } } int 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 {int z=x; int pp=y; queue<int>q; q.push(x); int old=dis[x]; dis[x]=dis[y]+w; while(!q.empty()) { int v=q.front();q.pop(); for(int u:c[v]) { if(u!=v) { dis[u]=dis[u]-old+w; q.push(u); } } } // cout<<"NEWW "<<endl; // for(int i=1;i<=n;i++) // cout<<dis[i]<<" "; /// cout<<endl; } else//x parent {int z=y; //change for all children of y int old=dis[y];//6 int sub=dis[y]-dis[x];//4 dis[y]=dis[x]+w;//2 queue<int>q; q.push(y); //dis[y]=(dis[y]-dis[x])+w; while(!q.empty()) { int v=q.front();q.pop(); for(int u:c[v]) {//cout<<"U "<<u<<endl; if(u!=v) { //cout<<"DIS U"<<dis[u]-sub<<endl; dis[u]=dis[u]-sub+w; // cout<<"DIS U"<<dis[u]<<endl; q.push(u); } } } // cout<<"NEW "<<endl; // for(int i=1;i<=n;i++) //cout<<dis[i]<<" "; // cout<<endl; } } } return 0; }

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:55:20: warning: overflow in conversion from 'double' to 'int' changes value from '1.0e+18' to '2147483647' [-Woverflow]
   55 |            int ans=1e18;
      |                    ^~~~
#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...