답안 #243898

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
243898 2020-07-02T05:40:43 Z errorgorn Pipes (CEOI15_pipes) C++14
20 / 100
904 ms 65540 KB
//雪花飄飄北風嘯嘯
//天地一片蒼茫
 
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/rope>
using namespace std;
using namespace __gnu_pbds;
using namespace __gnu_cxx;
#define ll long long
#define ii pair<ll,ll>
#define iii pair<ii,ll>
#define fi first
#define se second
#define endl '\n'
#define debug(x) cout << #x << " is " << x << endl;
 
#define rep(x,start,end) for(auto x=(start)-((start)>(end));x!=(end)-((start)>(end));((start)<(end)?x++:x--))
#define all(x) (x).begin(),(x).end()
#define sz(x) (int)(x).size()
 
ll MAX(ll a){return a;}
ll MIN(ll a){return a;}
template<typename... Args>
ll MAX(ll a,Args... args){return max(a,MAX(args...));}
template<typename... Args>
ll MIN(ll a,Args... args){return min(a,MIN(args...));}
 
#define indexed_set tree<ll,null_type,less<ll>,rb_tree_tag,tree_order_statistics_node_update>
 
mt19937 rng(chrono::system_clock::now().time_since_epoch().count());
 
int n,m;
ii al[12000005];
int pp[100005];
int dfs_time[100005]; ///first time to reach vertex
int low[100005]; ///lowest time vertex it can reach with 1 backtrack
int dfs_counter=1;
void dfs(int i,int j){ ///j is parent of i
	dfs_time[i]=low[i]=dfs_counter++;
	
	bool vis_par=false;
	
	rep(x,pp[i],pp[i+1]){
		int it=al[x].se;
		if (!dfs_time[it]){ ///uninitialized vertex
			dfs(it,i);
			low[i]=min(low[i],low[it]);
			
			if (low[it]>dfs_time[i]){
				cout<<it<<" "<<i<<endl;
			}
		}
		else if (it!=j || vis_par){ ///make sure it is a back edge
			low[i]=min(low[i],dfs_time[it]);
		}
		else{
			vis_par=true;
		}
	}
}
 
 
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	
	cin>>n>>m;
	
	int a,b;
	rep(x,0,m){
		cin>>a>>b;
		
		al[2*x]={a,b};
		al[2*x+1]={b,a};
	}
	
	sort(al,al+2*m);
	
	memset(pp,-1,sizeof(pp));
	pp[n+1]=2*m;
	rep(x,2*m,0) pp[al[x].fi]=x;
	rep(x,n+1,1) if (pp[x]==-1) pp[x]=pp[x+1];
	//rep(x,1,n+2) cout<<pp[x]<<" ";cout<<endl;
	
	rep(x,1,n+1) if (!dfs_time[x]) dfs(x,-1);
}
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 768 KB Output is correct
2 Correct 5 ms 768 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 10 ms 1408 KB Output is correct
2 Correct 12 ms 1152 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 273 ms 19832 KB Memory limit exceeded (if you are sure your verdict is not MLE, please contact us)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 430 ms 33348 KB Memory limit exceeded (if you are sure your verdict is not MLE, please contact us)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 710 ms 50040 KB Memory limit exceeded (if you are sure your verdict is not MLE, please contact us)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 904 ms 64504 KB Memory limit exceeded (if you are sure your verdict is not MLE, please contact us)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 469 ms 65540 KB Execution killed with signal 9 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 475 ms 65536 KB Execution killed with signal 9 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 473 ms 65540 KB Execution killed with signal 9 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 497 ms 65540 KB Execution killed with signal 9 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -