CF1322C Instant Noodles
Solution
前置知识
因为
题解
我们设
当
当
当
其实和别的题解差不多\^o^/,但是咱没用 因为不会。(而且是完整的代码 ԅ(¯﹃¯ԅ)
代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=5e5+10;
int T,n,m;
ll c[N];
set<int> g[N];//我这里是拿set求的集合
map<set<int>,ll> mp;//拿map做的映射
ll gcd(ll x,ll y){
return y==0?x:gcd(y,x%y);
}
int main(){
scanf("%d",&T);
while(T--){
mp.clear();
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%lld",&c[i]);
for(int i=1;i<=n;i++) g[i].clear();
while(m--){
int u,v;
scanf("%d%d",&u,&v);
g[v].insert(u);
}
for(int i=1;i<=n;i++)
if(!g[i].empty()) mp[g[i]]+=c[i];
ll ans=0;
for(auto &i:mp)
if(ans) ans=gcd(ans,i.second);
else ans=i.second;
printf("%lld\n",ans);
}
return 0;
}