Submission #473372

#TimeUsernameProblemLanguageResultExecution timeMemory
473372ZaZo_Paths (BOI18_paths)C++14
0 / 100
96 ms21584 KiB
#include <bits/stdc++.h> #define ZAZO ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define int long long using namespace std; int n , m , k; int cols[300001],another[300001][6]={0}; vector<int>edges[300001]; set<vector<int>>ans; void dfs(int node,set<int>path,vector<int>path2,int par) { if(path2.size()==0){ path2.push_back(node); path.insert(cols[node]); } for(int i = 0 ; i < edges[node].size() ; i++) { if(edges[node][i]!=par && !path.count(cols[edges[node][i]]) && path.size()<=k ){ path.insert(cols[edges[node][i]]); path2.push_back(edges[node][i]); ans.insert(path2); dfs(edges[node][i] , path , path2 , node); path2.erase(path2.begin()+(path2.size()-1)); path.erase(cols[edges[node][i]]); } } } int32_t main() { ZAZO int an2=0; cin >> n >> m >> k ; vector<pair<int,int>>e; for(int i = 1 ; i <= n ; i++) { cin>>cols[i]; } for(int i = 0 ; i < m ; i++) { int u , v; cin >> u >> v; e.push_back({u,v}); if(cols[u]!=cols[v]) an2+=2; edges[u].push_back(v); edges[v].push_back(u); another[u][cols[v]]++; another[v][cols[u]]++; } if(n>=100 && m<=100 && k<=4) { //ba7sb kol path w dah bya5od time 3aly f 7ygeeb awel subtask for(int i = 1 ; i <= n ; i++) { dfs(i,{},{},-1); } cout<<ans.size()<<endl; } else { //subtask 2 //k<=3 that's mean that maximum path = 3 if(k==1){ cout<<n; return 0; } if(k==2){ cout<<an2; return 0; } int ans2=m*2; for(int o=0;o<e.size();o++) { int i = e[o].first , j=e[o].second; for(int p = 1 ; p <= k ; p ++) { if(p!=cols[i]&&p!=cols[j]&&cols[i]!=cols[j]&&i!=j) { // cout<<i<< " "<<j<<" "<<p<<" "<<another[i][p]+another[j][p]<<endl; ans2+=another[i][p]+another[j][p]; } } } cout<<ans2<<endl; } }

Compilation message (stderr)

paths.cpp: In function 'void dfs(long long int, std::set<long long int>, std::vector<long long int>, long long int)':
paths.cpp:15:21: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   15 |   for(int i = 0 ; i < edges[node].size() ; i++)
      |                   ~~^~~~~~~~~~~~~~~~~~~~
paths.cpp:17:79: warning: comparison of integer expressions of different signedness: 'std::set<long long int>::size_type' {aka 'long unsigned int'} and 'long long int' [-Wsign-compare]
   17 |     if(edges[node][i]!=par && !path.count(cols[edges[node][i]]) && path.size()<=k ){
      |                                                                    ~~~~~~~~~~~^~~
paths.cpp: In function 'int32_t main()':
paths.cpp:69:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   69 |     for(int o=0;o<e.size();o++)
      |                 ~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...