Submission #1243562

#TimeUsernameProblemLanguageResultExecution timeMemory
1243562letronghungCloud Computing (CEOI18_clo)C++17
0 / 100
3 ms4936 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define fr(i,a,b) for(int i=a;i<=b;i++) ll const maxN=1e5+5; ll n,m,cnt=0,tpltm[maxN],id=0; ll a[maxN],low[maxN],num[maxN],dem[maxN],dp[maxN]; bool dele[maxN]; stack<ll> st; vector<ll> g[maxN],sum_of_coin,final_graph[maxN]; void dfs(ll u){ low[u]=num[u]=cnt++; st.push(u); for(ll v:g[u]){ if(dele[v]) continue; if(!num[v]){ dfs(v); low[u]=min(low[u],low[v]); } else low[u]=min(low[u],num[v]); } if(num[u]==low[u]){ ll sum=0; while(1){ ll v=st.top(); st.pop(); dele[v]=true; tpltm[v]=id; sum+=a[v]; if(v==u) break; } id++; sum_of_coin.push_back(sum); } } int main(){ cin>> n>> m; fr(i,1,n){ cin>>a[i]; } fr(i,1,m){ ll x,y; cin>>x>>y; g[x].push_back(y); } fr(i,1,n){ if(!num[i]) dfs(i); } set<pair<ll,ll>> dathem; fr(i,1,n){ for(ll v : g[i]){ ll x=tpltm[i],y=tpltm[v]; if(x!=y && !dathem.count({x,y})){ final_graph[x].push_back(y); dathem.insert({x,y}); } } } fr(i,0,id-1){ for(ll v:final_graph[i]){ dem[v]++; } } queue<ll> q; fr(i,0,id-1){ if(dem[i]==0){ dp[i]=sum_of_coin[i]; q.push(i); } } while(!q.empty()){ ll u=q.front(); q.pop(); for(ll v:final_graph[u]){ dp[v]=max(dp[v],dp[u]+sum_of_coin[v]); dem[v]--; if(dem[v]==0){ q.push(v); } } } cout<< *max_element(dp,dp+id); }
#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...