社区讨论
大雾(
P1407[国家集训队] 稳定婚姻参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mjvbaphe
- 此快照首次捕获于
- 2026/01/01 18:38 2 个月前
- 此快照最后确认于
- 2026/01/01 18:47 2 个月前
注意看20pts代码:
CPP#include <bits/stdc++.h>
#define int long long
using namespace std;
map<string,int> e;
vector<int> f[400010];stack<int> st;bool in[400010];
int n,i,m,dfn[8010],low[8010],belong[8010],cnt,cz;
string x,y;
void tarjan(int x){
dfn[x]=low[x]=++cnt;in[x]=1;st.push(x);
for(int i:f[x])
if(!dfn[i]) tarjan(i),low[x]=min(low[x],low[i]);
else if(in[i]) low[x]=min(low[x],dfn[i]);
if(dfn[x]==low[x]){
cz++;int y;
do{
y=st.top();st.pop();in[y]=0;
belong[y]=cz;
}while(y!=x);
}
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cin>>n;
for(i=1;i<=n;i++){
cin>>x>>y;
e[x]=i;e[y]=i+n;
f[i].push_back(i+n);
}
cin>>m;
for(i=1;i<=m;i++){
cin>>x>>y;
f[e[y]].push_back(e[x]);
}
for(i=1;i<=n*2;i++) if(!dfn[i]) tarjan(i);
for(i=1;i<=n;i++)
if(belong[e[x]]==belong[e[y]]) cout<<"Unsafe\n";
else cout<<"Safe\n";
return 0;
}
100pts:
CPP#include <bits/stdc++.h>
#define int long long
using namespace std;
map<string,int> e;
vector<int> f[400010];stack<int> st;bool in[400010];
int n,i,m,dfn[8010],low[8010],belong[8010],cnt,cz;
string x,y;
void tarjan(int x){
dfn[x]=low[x]=++cnt;in[x]=1;st.push(x);
for(int i:f[x])
if(!dfn[i]) tarjan(i),low[x]=min(low[x],low[i]);
else if(in[i]) low[x]=min(low[x],dfn[i]);
if(dfn[x]==low[x]){
cz++;int y;
do{
y=st.top();st.pop();in[y]=0;
belong[y]=cz;
}while(y!=x);
}
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cin>>n;
for(i=1;i<=n;i++){
cin>>x>>y;
e[x]=i;e[y]=i+n;
f[i].push_back(i+n);
}
cin>>m;
for(i=1;i<=m;i++){
cin>>x>>y;
f[e[y]].push_back(e[x]);
}
for(i=1;i<=n*2;i++) if(!dfn[i]) tarjan(i);
for(i=1;i<=n;i++)
if(belong[i]==belong[i+n]) cout<<"Unsafe\n";
else cout<<"Safe\n";
return 0;
}
为什么修改了这个就对了,玄关!
回复
共 1 条回复,欢迎继续交流。
正在加载回复...