답안 #878653

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
878653 2023-11-25T03:46:34 Z UmairAhmadMirza One-Way Streets (CEOI17_oneway) C++14
0 / 100
0 ms 348 KB
#include <bits/stdc++.h>
using namespace std;
int const N=1e3+5;
vector<int> adj[N];
int n,m;
bool vis1[N];
bool inpath[N];
int cnt[N];
map<pair<int,int>,char> mp;
void dfs1(int node,int par){
	// cout<<node<<endl;
	vis1[node]=1;
	inpath[node]=1;
	for(auto i:adj[node]){
		if(vis1[i]==0){
			dfs1(i,node);
			cnt[node]+=cnt[i];
			if(cnt[i]>0){
				mp[{i,node}]='B';
				mp[{node,i}]='B';
			}
		}
		if(inpath[i]&&i!=par){
			cnt[node]++;
			cnt[i]--;
			mp[{node,i}]='B';
			mp[{i,node}]='B';
		}
	}
	inpath[node]=0;
}
vector<int> path;
int des=0;
bool vis[N];
void dfs(int node){
	path.push_back(node);
	vis[node]=1;
	if(node==des){
		des=-1;
		int sz=path.size();
		for(int i=0;i<sz-1;i++){
			if(mp[{path[i],path[i+1]}]!='B')
				mp[{path[i],path[i+1]}]='D';
		}
	}
	if(des==-1)
		return;
	for(auto i:adj[node]){
		if(vis[i]==0)
			dfs(i);
	}
}
int main(){
	cin>>n>>m;
	if(n>1000){
		cout<<"!"<<endl;
		return 0;
	}
	vector<pair<int,int>> edge;
	for (int i = 0; i < m; ++i){
		int u,v;
		cin>>u>>v;
		adj[u].push_back(v);
		adj[v].push_back(u);
		edge.push_back({u,v});
	}
	dfs1(1,0);
	int k;
	cin>>k;
	pair<int,int> sp[k];
	for (int i = 0; i < k; ++i){
		cin>>sp[i].first>>sp[i].second;
		des=sp[i].second;
		dfs(sp[i].first);
	}
	for(auto ed:edge){
		int u=ed.first;
		int v=ed.second;
		if(mp[ed]=='D')
			cout<<'R';
		else if(mp[{v,u}]=='D')
			cout<<'L';
		else
			cout<<'B';
	}
	cout<<endl;
	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -