看了一下题解,好像找不到错,哪位dalao能帮忙找一下错啊qwq
#include <bits/stdc++.h>
using namespace std;
#define MAXN 100005
#define INF 0x3fffffff
#define MOD 1000000007
int n,m,w[MAXN];
vector<int> g[MAXN];
int step,dfn[MAXN],low[MAXN],tot,belong[MAXN],minn[MAXN],cnt[MAXN];
long long ans,ans2=1;
bool vis[MAXN];
stack<int> stk;
void tarjan(int u){
dfn[u]=low[u]=++step;
vis[u]=true;
stk.push(u);
for(int i=0;i<g[u].size();i++){
int v=g[u][i];
if(!dfn[v]){
tarjan(v);
low[u]=min(low[u],low[v]);
}else if(vis[v]){
low[u]=min(low[u],dfn[v]);
}
}
if(dfn[u]==low[u]){
tot++;
while(stk.top()!=u){
int v=stk.top();
stk.pop();
vis[v]=false;
belong[v]=tot;
}
int v=stk.top();
stk.pop();
vis[v]=false;
belong[v]=tot;
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",w+i);
}
scanf("%d",&m);
for(int i=1;i<=m;i++){
int u,v;
scanf("%d%d",&u,&v);
g[u].push_back(v);
}
for(int i=1;i<=n;i++){
if(!dfn[i]){
tarjan(i);
}
}
fill(minn+1,minn+1+tot,INF);
for(int u=1;u<=n;u++){
minn[belong[u]]=min(minn[belong[u]],w[belong[u]]);
}
for(int u=1;u<=n;u++){
if(w[u]==minn[belong[u]]){
cnt[belong[u]]++;
}
}
for(int i=1;i<=tot;i++){
ans+=minn[i];
ans2*=cnt[i];
ans2%=MOD;
}
printf("%lld %lld\n",ans,ans2);
return 0;
}