求助 on Subtask#1
查看原帖
求助 on Subtask#1
728090
RaynorLzj楼主2024/7/27 22:56

Subtask#0全过,Subtask#1WA掉,求各位大佬帮忙看一看,感激不尽!

// Problem: P5058 [ZJOI2004] 嗅探器
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P5058
// Memory Limit: 125 MB
// Time Limit: 1000 ms
// Author: Leizijin
// 
// Powered by CP Editor (https://cpeditor.org)
// 如果有解,那么答案是图中满足下列条件的点
// 
// 1.在所有a to b的路径上
// 2.是图的割点
// 3.编号在所有满足上述条件的点中序号最小
//
// ina[u], inb[u]分别表示a/b是否在以u为根的dfs搜索树当中
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define ull unsigned long long
#define pb push_back
#define pii pair<ll,ll>
#define il inline
#define fastio ios::sync_with_stdio(false), cin.tie(0)
const int N = 7e5+5;
vector<int> G[N];
int dfn[N], low[N], cnt[N], ANS = INT_MAX;
int DFN_CLOCK;
bool is_bridge[N],ain[N],bin[N];
int A,B;
void Init(){
	DFN_CLOCK = 0;
	for(int i=0; i<N; i++) G[i].clear();
	memset(dfn, 0, sizeof(dfn));
	memset(low, 0, sizeof(low));
	memset(is_bridge, 0, sizeof(is_bridge));
	memset(cnt, 0, sizeof(cnt));
}
void Tarjan(int u, int pre){
	dfn[u] = low[u] = ++DFN_CLOCK;
	if(u == A) ain[u] = 1;
	if(u == B) bin[u] = 1;
	int son = 0, first_son = 0, siz = G[u].size();
	for(int i=0,v; i<siz; i++){
		v = G[u][i];
		if(v == pre) continue;
		if(!dfn[v]){
			son ++;
			if(son == 1) first_son = v;
			Tarjan(v, u);
			ain[u] |= ain[v], bin[u] |= bin[v];
			if((u != pre && low[v] >= dfn[u]) || (u == pre && son > 1) && u!=A && u!=B){
				is_bridge[u] = 1;
				if(ain[v] ^ bin[v]){
					ANS = min(ANS, u);
				}
			}
			low[u] = min(low[u], low[v]);
		}
		else{
			low[u] = min(low[u], dfn[v]);
		}
	}
	if(u == pre && son >= 2){  // update first_son
		if(ain[first_son] ^ bin[first_son] && u!=A && u!=B){  // 不能删掉主机?
			ANS = min(ANS, u);
		}
	}
}
int n;
signed main(){
	fastio;
	cin >> n;
	int u,v;
	while(cin >> u >> v, u && v){
		G[u].pb(v), G[v].pb(u);
		
	}
	cin >> A >> B;
	if(A == B){
		printf("No solution\n");
		return 0;
	}
	for(int i=1; i<=n; i++) Tarjan(i, i);
	if(ANS == INT_MAX){
		printf("No solution\n");
	}
	else{
		printf("%d\n", ANS);
	}
	return 0;
}
// 第一遍提交WA on Subtask 1,原数据满分

2024/7/27 22:56
加载中...