結果
問題 | No.1194 Replace |
ユーザー |
|
提出日時 | 2020-08-02 14:00:09 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 529 ms / 2,000 ms |
コード長 | 1,783 bytes |
コンパイル時間 | 2,840 ms |
コンパイル使用メモリ | 200,576 KB |
最終ジャッジ日時 | 2025-01-12 13:16:14 |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 27 |
ソースコード
#include<bits/stdc++.h>using namespace std;#define int long long#define rep(i,n) for(int i=0;i<n;i++)#define REP(i,n) for(int i=1;i<n;i++)#define rev(i,n) for(int i=n-1;i>=0;i--)#define all(v) v.begin(),v.end()#define P pair<int,int>#define len(s) (int)s.size()template<class T> inline bool chmin(T &a, T b){if(a>b){a=b;return true;}return false;}template<class T> inline bool chmax(T &a, T b){if(a<b){a=b;return true;}return false;}constexpr int mod = 1e9+7;constexpr int inf = 3e18;int N,M,Ans;int B[500005],C[500005],cnt[1000005];vector<int>xx,G[1000005],rG[1000005];bool used[1000005];vector<int>vs;void dfs(int x){used[x]=true;for(int i:G[x])if(!used[i])dfs(i);vs.push_back(x);}int cmp[1000005],mx[1000005];vector<int>newrG[1000005];void rdfs(int v,int k){used[v]=true;cmp[v]=k;cnt[k]++;chmax(mx[k],xx[v]);for(int i:rG[v])if(!used[i])rdfs(i,k);}int scc(){rep(i,N)if(!used[i])dfs(i);memset(used,0,sizeof(used));int k=0;rev(i,len(vs))if(!used[vs[i]])rdfs(vs[i],k++);rep(i,N){for(int j:G[i]){newrG[cmp[j]].push_back(cmp[i]);}}return k;}signed main(){cin.tie(0);ios::sync_with_stdio(false);cin>>N>>M;rep(i,M){cin>>B[i]>>C[i];xx.push_back(B[i]);xx.push_back(C[i]);}sort(all(xx));xx.erase(unique(all(xx)),xx.end());Ans=(1+N)*N/2;for(int i:xx)Ans-=i;rep(i,M){B[i]=lower_bound(all(xx),B[i])-xx.begin();C[i]=lower_bound(all(xx),C[i])-xx.begin();G[B[i]].push_back(C[i]);rG[C[i]].push_back(B[i]);}N=len(xx);N=scc();rev(i,N){Ans+=mx[i]*cnt[i];for(int j:newrG[i])chmax(mx[j],mx[i]);}cout<<Ans<<endl;}