Submission #396292

#TimeUsernameProblemLanguageResultExecution timeMemory
396292The_BlitzPipes (CEOI15_pipes)C++17
0 / 100
1391 ms65536 KiB
// Restart // += O(logn) ; + = O(n) //#pragma GCC optimize("Ofast") //#pragma GCC optimize("unroll-loops") //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") #include<bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> // Common file #include <ext/pb_ds/tree_policy.hpp> // Including tree_order_statistics_node_update #define fastio ios_base::sync_with_stdio(0);cin.tie(0) #define fst first #define snd second #define all(x) (x).begin(), (x).end() #define pb push_back #define sz size() #define FORN(i,j,n) for(int i=j; i<(int)n;i++) #define FOR(i,n) FORN(i,0,n) #define FORIT(i,x) for( auto i = x.begin() ; i != x.end() ; i++ ) #define MOD 998244353LL #define MOD1 1000000007LL #define LIM 262150 #define ones(x) __builtin_popcount(x) #define trace(x) cerr << #x << ": " << x << endl; #define trace2(x, y) cerr << #x << ": " << x << " | " << #y << ": " << y << endl; #define trace3(x, y,z) cerr << #x << ": " << x << " | " << #y << ": " << y << " | " << #z << ": " << z << endl; #define INF 1000000000 #define in(x) cin>>x; #define out(x) cout<<x; #define MAXIMO 1LL<<60 #define loga2(x) __builtin_ctzll(x) //SOLO PARA POTENCIAS DE 2 using namespace std; using namespace __gnu_pbds; typedef long long ll ; typedef unsigned long long ull ; typedef vector <int> vi; typedef pair <int,int> ii; typedef pair <int,ii> iii; typedef vector <string> vs; typedef vector <ii> vii; typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> ordered_set; vector<int> G[100005]; int g_low[100005]; int g_num[100005]; int P[2][100005]; int n,m; int cont = 1; void dsu(int z){ for(int i=1; i<=n;i++){ P[z][i] = i; } } int dsu_find(int z, int x){ if(x==P[z][x]) return x; P[z][x] = dsu_find(z,P[z][x]); return P[z][x]; } void dsu_uni(int z, int a , int b){ int x = dsu_find(z,a); int y = dsu_find(z,b); if(x==y) return ; P[z][y] = x; } void dfs(int x ,int p = -1){ // p: parent g_low[x]=g_num[x]=cont++; // low:component ; num:visit order for(int i=0;i<G[x].size();i++){ int &v =G[x][i]; if(g_num[v]==-1){ dfs(v,x); /*if(g_low[v] >= g_num[x]){ // CUT-VERTEX //cut[x] = true; }*/ if(g_low[v] > g_num[x]){ // BRIDGE //bridge.push_back({min(x,v),max(x,v)}); cout<< x << " " << v << "\n"; } g_low[x]=min(g_low[x],g_low[v]); } if(v != p){ g_low[x]=min(g_low[x],g_num[v]); } } } void go(){ cin>>n>>m; int x,y; FORN(i,1,n+1){ g_low[i] = -1; g_num[i] = -1; } dsu(0); dsu(1); FOR(i,m){ cin>>x>>y; if(dsu_find(0,x) != dsu_find(0,y)){ dsu_uni(0,x,y); } else{ if(dsu_find(1,x) != dsu_find(1,y)){ dsu_uni(1,x,y); } else continue; } G[x].push_back(y); G[y].push_back(x); } for(int i=1;i<=n;i++){ if(g_num[i] == -1) dfs(i); } } void timer(){ clock_t begin = clock(); go(); clock_t end = clock(); double time_spent = (double)(end - begin) / CLOCKS_PER_SEC; printf("%lf\n",time_spent); } int main() { fastio; go(); //timer(); return 0; }

Compilation message (stderr)

pipes.cpp: In function 'void dfs(int, int)':
pipes.cpp:79:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   79 |     for(int i=0;i<G[x].size();i++){
      |                 ~^~~~~~~~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...