# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
527367 |
2022-02-17T09:54:55 Z |
jamielim |
Pipes (CEOI15_pipes) |
C++14 |
|
1453 ms |
14372 KB |
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb emplace_back
#define ALL(x) x.begin(),x.end()
#define SZ(x) (int)x.size()
typedef long long ll;
typedef pair<int,int> ii;
typedef pair<ii,ii> i4;
const int MOD=1000000007;
const int INF=1012345678;
const ll LLINF=1012345678012345678LL;
const double PI=3.1415926536;
const double EPS=1e-14;
const int MAXN=100005;
int n,m;
int par[MAXN],par2[MAXN]; // par, depth
int root(int x){return par[x]=(par[x]==x?x:root(par[x]));}
int root2(int x){return par2[x]=(par2[x]==x?x:root2(par2[x]));}
vector<int> adj[MAXN]; // only stores at most 2*tree
bool vis[MAXN];
int low[MAXN];
int ctr=0;
void dfs(int x){
vis[x]=1;
par2[x]=ctr;
low[x]=ctr++;
for(int i:adj[x]){
if(i==par[x])continue;
if(!vis[i]){
par[i]=x;
dfs(i);
if(low[i]>par2[x])printf("%d %d\n",x+1,i+1);
low[x]=min(low[x],low[i]);
}else low[x]=min(low[x],par2[i]);
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)par[i]=par2[i]=i;
int a,b;
for(int i=0;i<m;i++){
scanf("%d%d",&a,&b);a--;b--;
//if a,b are in different trees, merge the two trees
int ra=root(a),rb=root(b);
if(ra!=rb){
par[ra]=rb;
adj[a].pb(b);
adj[b].pb(a);
continue;
}
//otherwise, take note that later we have to get rid of the entire cycle
int r2a=root2(a),r2b=root2(b);
if(r2a!=r2b){
par2[r2a]=par2[r2b];
adj[a].pb(b);
adj[b].pb(a);
}
}
memset(par,-1,sizeof(par));
memset(par2,-1,sizeof(par2));
memset(low,-1,sizeof(low));
for(int i=0;i<n;i++)if(!vis[i])dfs(i);
}
Compilation message
pipes.cpp: In function 'int main()':
pipes.cpp:45:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
45 | scanf("%d%d",&n,&m);
| ~~~~~^~~~~~~~~~~~~~
pipes.cpp:49:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
49 | scanf("%d%d",&a,&b);a--;b--;
| ~~~~~^~~~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
3788 KB |
Output is correct |
2 |
Incorrect |
3 ms |
3788 KB |
Wrong number of edges |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
9 ms |
4208 KB |
Output is correct |
2 |
Incorrect |
9 ms |
4044 KB |
Wrong number of edges |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
131 ms |
5616 KB |
Output is correct |
2 |
Incorrect |
134 ms |
5520 KB |
Wrong number of edges |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
221 ms |
6824 KB |
Wrong number of edges |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
399 ms |
8336 KB |
Output is correct |
2 |
Correct |
327 ms |
7624 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
525 ms |
10832 KB |
Output is correct |
2 |
Incorrect |
409 ms |
7884 KB |
Wrong number of edges |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
747 ms |
11832 KB |
Output is correct |
2 |
Incorrect |
719 ms |
9372 KB |
Wrong number of edges |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1002 ms |
13540 KB |
Output is correct |
2 |
Incorrect |
911 ms |
9460 KB |
Wrong number of edges |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1336 ms |
14372 KB |
Output is correct |
2 |
Incorrect |
1158 ms |
9160 KB |
Wrong number of edges |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1453 ms |
13204 KB |
Output is correct |
2 |
Correct |
1373 ms |
10948 KB |
Output is correct |