제출 #156095

#제출 시각아이디문제언어결과실행 시간메모리
156095HungAnhGoldIBO2020전압 (JOI14_voltage)C++14
100 / 100
144 ms18808 KiB
#include<iostream> #include<vector> #include<algorithm> const int N=2e5+2; using namespace std; vector<int> adj[N],lis1; int cnt[N][3],color[N],level[N],numno=0,ans=0; vector<pair<int,int> > lis; bool used[N]; bool dfs(int x,bool valid){ bool scare=valid,cac; for(int i=0;i<adj[x].size();i++){ if(!color[adj[x][i]]){ color[adj[x][i]]=3-color[x]; if(scare){ scare=dfs(adj[x][i],scare); } else{ cac=dfs(adj[x][i],scare); } } else{ if(color[adj[x][i]]!=3-color[x]){ scare=false; } } } return scare; } void dfs1(int x,int p){ lis1.push_back(x); bool first=true; for(int i=0;i<adj[x].size();i++){ if(!used[adj[x][i]]){ used[adj[x][i]]=true; level[adj[x][i]]=level[x]+1; dfs1(adj[x][i],x); cnt[x][0]+=cnt[adj[x][i]][0]; cnt[x][1]+=cnt[adj[x][i]][1]; } else{ if(adj[x][i]==p){ if(first){ first=false; continue; } } if(level[adj[x][i]]>level[x]){ continue; } if((level[x]-level[adj[x][i]])%2==0){ numno++; cnt[x][0]++; cnt[adj[x][i]][0]--; } else{ cnt[x][1]++; cnt[adj[x][i]][1]--; } } } } signed main(){ ios::sync_with_stdio(0); cin.tie(0); int n,m,i,j,k,root=0; cin>>n>>m; for(i=1;i<=m;i++){ cin>>j>>k; lis.push_back({min(j,k),max(j,k)}); adj[j].push_back(k); adj[k].push_back(j); } bool cac; for(i=1;i<=n;i++){ if(!color[i]){ color[i]=1; cac=dfs(i,true); if(!cac){ if(!root){ root=i; } else{ cout<<0; return 0; } } } } if(!root){ for(i=1;i<=n;i++){ if(!used[i]){ lis1.clear(); used[i]=true; dfs1(i,i); for(j=0;j<lis1.size();j++){ if(lis1[j]!=i&&cnt[lis1[j]][1]==0){ ans++; } } } } cout<<ans; return 0; } used[root]=true; dfs1(root,root); if(numno==1){ ans++; } for(i=1;i<=n;i++){ if(i!=root&&used[i]&&cnt[i][0]==numno&&cnt[i][1]==0){ ans++; } } cout<<ans; }

컴파일 시 표준 에러 (stderr) 메시지

voltage.cpp: In function 'bool dfs(int, bool)':
voltage.cpp:12:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<adj[x].size();i++){
              ~^~~~~~~~~~~~~~
voltage.cpp:11:19: warning: variable 'cac' set but not used [-Wunused-but-set-variable]
  bool scare=valid,cac;
                   ^~~
voltage.cpp: In function 'void dfs1(int, int)':
voltage.cpp:33:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<adj[x].size();i++){
              ~^~~~~~~~~~~~~~
voltage.cpp: In function 'int main()':
voltage.cpp:96:14: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(j=0;j<lis1.size();j++){
             ~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...