社区讨论

WA 0pts 求助>_<

P2194HXY烧情侣参与者 3已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@mhjursl0
此快照首次捕获于
2025/11/04 08:50
4 个月前
此快照最后确认于
2025/11/04 08:50
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
#define int long long

using namespace std;

const int N=100005,mod=1000000007;

int n,m;
int w[N];
vector<int> vec[N];

int cnt,siz,sc,dfn[N],low[N],sta[N],scc[N];
int mcost[N],msiz[N];
bool insta[N];
void dfs(int u) {
	dfn[u]=low[u]=++cnt;
	sta[++siz]=u,insta[u]=1;
	for(auto& v:vec[u]) {
		if(!dfn[v]) {
			dfs(v);
			low[u]=min(low[u],low[v]);
		}else if(insta[v]) low[u]=min(low[u],dfn[v]);
	}
	
	if(dfn[u]==low[u]) {
		++sc;mcost[sc]=1e9;
		do {
			scc[sta[siz]]=sc;
			insta[sta[siz]]=0;
			if(w[sta[siz]]<mcost[sc]) mcost[sc]=w[sta[siz]],msiz[sc]=1;
			else if(w[sta[siz]]==mcost[sc]) msiz[sc]++;
		}while(sta[siz--]!=u);
	}
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
	
	cin >> n;
	for(int i=1;i<=n;++i) cin >> w[i];
	cin >> m;
	
	int u,v;
	for(int i=1;i<=m;++i) {
		cin >> u >> v;
		vec[u].push_back(v);
	}
	
	dfs(1);
	
	int cost=0,ans=1;
	for(int i=1;i<=sc;++i) cost+=mcost[i],ans*=msiz[i];
	
	cout << cost << ' ' << ans << endl;
	
	return 0;
}

回复

4 条回复,欢迎继续交流。

正在加载回复...