社区讨论
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 条回复,欢迎继续交流。
正在加载回复...