社区讨论
玄学
P2783有机化学之神偶尔会做作弊参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mkqhhqhn
- 此快照首次捕获于
- 2026/01/23 14:12 4 周前
- 此快照最后确认于
- 2026/01/23 20:56 4 周前
CPP
#include<iostream>
#include<vector>
#include<cmath>
#include<stack>
#include<cstring>
#include<queue>
using namespace std;
int n,m;
vector<int> G1[10010];
bool vis[10010];
int id,dfn[10010],low[10010];
stack<int> s;
int k,mp[10010];
void tar(int u,int fa) {
vis[u]=1;
low[u]=dfn[u]=++id;
s.push(u);
for(int v:G1[u])
if(v!=fa) {
if(!dfn[v]) {
tar(v,u);
low[u]=min(low[v],low[u]);
} else if(vis[v])
low[u]=min(dfn[v],low[u]);
}
if(low[u]==dfn[u]) {
k++;
for(int v=s.top(); v!=u; s.pop(),v=s.top()) {
mp[v]=k;
vis[v]=0;
}
mp[u]=k;
vis[u]=0;
s.pop();
}
return;
}
vector<int> G2[10010];
int T;
int a,b;
int dis[10010];
queue<int> q;
void bfs() {
memset(dis,0x3f,sizeof(dis));
dis[a]=1;
q.push(a);
while(!q.empty()) {
int u=q.front();
q.pop();
for(int v:G2[u])
if(dis[v]>dis[u]+1) {
dis[v]=dis[u]+1;
q.push(v);
}
}
return;
}
void print(int a) {
if(a>=2)
print(a>>1);
cout<<(a&1);
return;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
for(int i=1,u,v; i<=m; i++) {
cin>>u>>v;
G1[u].push_back(v);
G1[v].push_back(u);
}
// for(int i=1; i<=n; i++)
// if(!dfn[i])
tar(1,0);
for(int i=1; i<=n; i++) {
for(int j:G1[i])
if(mp[i]!=mp[j])
G2[mp[i]].push_back(mp[j]);
}
cin>>T;
while(T--) {
cin>>a>>b;
a=mp[a];
b=mp[b];
bfs();
print(dis[b]);
cout<<'\n';
}
return 0;
}
我用这份程序交了8次
2发TLE
https://www.luogu.com.cn/record/258613016
https://www.luogu.com.cn/record/258630510
6发AC
https://www.luogu.com.cn/record/258612538
https://www.luogu.com.cn/record/258630038
https://www.luogu.com.cn/record/258630553
https://www.luogu.com.cn/record/258631011
https://www.luogu.com.cn/record/258631099
https://www.luogu.com.cn/record/258631713
TLE的两次提交有些测试点运行明显较慢 因该不是测评波动
为什么?
回复
共 1 条回复,欢迎继续交流。
正在加载回复...