Submission #43270

#TimeUsernameProblemLanguageResultExecution timeMemory
43270ffresh우호 조약 체결 (JOI14_friends)C++14
100 / 100
148 ms14700 KiB
#include <bits/stdc++.h> using namespace std; const int N = 2e5+15; long long par[N],sz[N],esz[N]; vector<int> adj[N]; int f(int a){ if(a==par[a])return a; return par[a]= f(par[a]); } void merge(int a,int b){ a= f(a),b= f(b); if(a!=b){ par[b]= a; sz[a]+=sz[b]; esz[a]+=esz[b]; } ++esz[a]; } bool vis[N]; void dfs(int root){ vis[root]= 1; for(int i=0;i<adj[root].size();++i){ int u = adj[root][i]; if(!vis[u]){ dfs(u); } merge(u,root); } } int main(){ //freopen("input.txt","r",stdin); int n,m,a,b; scanf("%d%d",&n,&m); for(int i=0;i<m;++i){ scanf("%d%d",&a,&b); adj[a].push_back(b); } for(int i=1;i<=n;++i) par[i] =i,sz[i]= 1; for(int i=1;i<=n;++i){ if((int)adj[i].size()>=2){ int cur = adj[i][0],v; for(int j=0;j<adj[i].size();++j){ int u = adj[i][j]; if(!vis[u]) dfs(u); if(f(u)!=f(cur)){ v = f(cur),u = f(u); par[u] = v; esz[v]+=esz[u]; sz[v] += sz[u]; } } } } long long ret=0; for(int i=1;i<=n;++i){ if(f(i)==i){ ret += (long long)(sz[i]*(sz[i]-1)); ret -= esz[i]; } } ret+=m; cout<<ret<<endl; }

Compilation message (stderr)

friends.cpp: In function 'void dfs(int)':
friends.cpp:28:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<adj[root].size();++i){
               ^
friends.cpp: In function 'int main()':
friends.cpp:51:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for(int j=0;j<adj[i].size();++j){
                 ^
friends.cpp:41:21: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d",&n,&m);
                     ^
friends.cpp:43:22: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d%d",&a,&b);
                      ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...