数据都是一些999999937,999999929的一些大质数 非常绝望,跟同学对比后发现筛质数应该没啥问题,dinic算法也和模板比对过了,感觉是初始化的锅,但就是死活调不出来。
#include<iostream>
#include<stdio.h>
#include<queue>
#include<math.h>
using namespace std;
int read()
{
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-')f=-1;
c=getchar();
}
while(c>='0'&&c<='9')x=(x<<3)+(x<<1)+(c-'0'),c=getchar();
return x*f;
}
const int MAXN=1000*10+10,inf=0x3ffffff;
int n,m,s,t;
int a[MAXN];
int u[MAXN],v[MAXN],val[MAXN],first[MAXN],first1[MAXN],net[MAXN];
int cnt=1;
int level[MAXN];
int maxn=0,ans;
void add(int x,int y,int z)
{
cnt++;
u[cnt]=x;
v[cnt]=y;
val[cnt]=z;
net[cnt]=first[x];
first[x]=cnt;
first1[x]=cnt;
}
bool BFS()
{
for(int i=1;i<=n;i++)
level[i]=0;
level[s]=1;
for(int i=1;i<=n;i++)
first[i]=first1[i];
queue<int>q;
q.push(s);
while(!q.empty())
{
int x=q.front();
q.pop();
for(int i=first[x];i;i=net[i])
if(level[v[i]]==0&&val[i]!=0)level[v[i]]=level[x]+1,q.push(v[i]);
}
if(level[t]==0)return 0;
return 1;
}
int dfs(int x,int y)
{
if(x==t||y==0)return y;
int sum=0;
for(int i=first[x];i&&y-sum>0;i=net[i])
{
first[x]=i;
if(level[v[i]]<=level[x]||val[i]==0)continue;
int c=dfs(v[i],min(y-sum,val[i]));
sum+=c;
val[i]-=c;
val[i^1]+=c;
}
return sum;
}
int dinic()
{
int sum=0;
while(BFS())sum+=dfs(s,inf);
return sum;
}
int main()
{
n=read();
m=read();
for(int i=1;i<=n;i++)
a[i]=read();
s=++n;
t=++n;
for(int i=1;i<=n-2;i++)
if(i%2==1)add(s,i,0),add(i,s,0);
else add(i,t,0),add(t,i,0);
for(int i=1;i<=m;i++)
{
int x,y;
x=read();
y=read();
if(x%2==1)add(x,y,inf),add(y,x,0);
else add(y,x,inf),add(x,y,0);
}
for(int i=1;i<=n-2;i++)
maxn=max(a[i],maxn);
for(int i=2;i*i<=maxn;i++)
{
for(int j=1;j<=n-2;j++)
{
val[j*2]=0;
val[j*2+1]=0;
if(a[j]%i==0)
{
int sum=0;
while(a[j]%i==0)sum++,a[j]/=i;
val[j*2]=sum;
}
}
ans+=dinic();
}
for(int i=1;i<=n-2;i++)
{
if(a[i]==0||a[i]==1)continue;
int x=a[i];
for(int j=2;j<=(n-2)*2+1;j++)
val[j]=0;
for(int j=1;j<=n-2;j++)
{
val[j*2]=0;
val[j*2+1]=0;
if(a[j]%x==0)
{
int sum=0;
while(a[j]%x==0)sum++,a[j]/=x;
val[j*2]=sum;
}
}
ans+=dinic();
}
printf("%d\n",ans);
return 0;
}