思路:考试的时候直接想出来了,又有点担心复杂度,不过还是打了,居然是直接A掉,开心啊。

我们发现,Ai<=7,这一定是很重要的条件,我们考虑状态压缩,去枚举路径中出现了哪些数字,然后我们把原来n个点拆成 我们枚举数字的最小公倍数 个,因为如果一个数模某个数等于0,那么模它的因数也一定是0,因此我们的思路就是拆点最短路。

 #include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iostream>
const int p[]={,,,,,,,,,,,,,,,,,,,,,,,};
int tot,go[],first[],next[];
struct edge{
int u,v;
}e[];
int a[],n,m,vis[][],dis[][],c[][];
int read(){
int t=,f=;char ch=getchar();
while (ch<''||ch>''){if (ch=='-') f=-;ch=getchar();}
while (''<=ch&&ch<=''){t=t*+ch-'';ch=getchar();}
return t*f;
}
void insert(int x,int y){
tot++;
go[tot]=y;
next[tot]=first[x];
first[x]=tot;
}
void add(int x,int y){
insert(x,y);insert(y,x);
}
int gcd(int a,int b){
if (b==) return a;
else return gcd(b,a%b);
}
void build(int Mod){
for (int i=;i<=n;i++) first[i]=;tot=;
for (int i=;i<=m;i++){
if (Mod%a[e[i].u]!=) continue;
if (Mod%a[e[i].v]!=) continue;
add(e[i].u,e[i].v);
}
}
int spfa(int Mod){
build(Mod);
for (int i=;i<=n;i++)
for (int j=;j<Mod;j++)
dis[i][j]=0x3f3f3f3f,vis[i][j]=;
int h=,t=;c[h][]=;c[h][]=a[]%Mod;
vis[][]=;dis[][a[]%Mod]=a[];
while (h<=t){
int nowx=c[h][],nowy=c[h++][];
for (int i=first[nowx];i;i=next[i]){
int pur1=go[i],pur2=((nowy*%Mod)+a[pur1])%Mod;
if (dis[pur1][pur2]>dis[nowx][nowy]+a[pur1]){
dis[pur1][pur2]=dis[nowx][nowy]+a[pur1];
if (vis[pur1][pur2]) continue;
vis[pur1][pur2]=;
t++;
c[t][]=pur1;c[t][]=pur2;
}
}
vis[nowx][nowy]=;
}
return dis[n][];
}
void solve(){
int ans=0x3f3f3f3f;
int sb=a[]*a[n]/gcd(a[],a[n]);
for (int i=;i<;i++)
if (p[i]%sb==){
ans=std::min(ans,spfa(p[i]));
}
if (ans==0x3f3f3f3f) ans=-;
printf("%d\n",ans);
}
int main(){
int T=read();
while (T--){
n=read();m=read();
for (int i=;i<=n;i++) first[i]=;tot=;
for (int i=;i<=n;i++) a[i]=read();
for (int i=;i<=m;i++){
e[i].u=read();e[i].v=read();
}
solve();
}
}

XJOI网上同步训练DAY6 T1的更多相关文章

  1. XJOI网上同步训练DAY6 T2

    思路:记得FJ省队集训好像有过这题,可是我太弱了,根本不懂T_T #include<cstdio> #include<iostream> #include<cmath&g ...

  2. XJOI网上同步训练DAY5 T1

    思路:考虑得出,最终的集合一定是gcd=1的集合,那么我们枚举n个数中哪个数必须选,然后把它质因数分解,由于质数不会超过9个,可以状态压缩,去得出状态为0的dp值就是答案. #include<c ...

  3. XJOI网上同步训练DAY3 T1

    思路:看来我真是思博了,这么简单的题目居然没想到,而且我对复杂度的判定也有点问题.. 首先我们选了一个位置i的b,那一定只对i和以后的位置造成改变,因此我们可以这样看: 我们从前往后选,发现一个位置的 ...

  4. XJOI网上同步训练DAY2 T1

    [问题描述] 为了迎接校庆月亮中学操场开始施工.不久后操场下发现了很多古墓这些古墓中有很多宝藏.然而学生们逐渐发现自从操场施工之后学校的运气就开始变得特别不好.后来经过调查发现古墓下有一个太守坟由于操 ...

  5. XJOI网上同步训练DAY1 T1

    思路:我们考虑由于没有人的区间会覆盖其他人,所以我们将区间按左端点排序,发现如果地盘长度已知,可以贪心地尽量往左放,来判断是否有解,因此做法很简单,就是二分答案,然后O(n)贪心判定,复杂度为O(nl ...

  6. XJOI网上同步训练DAY5 T3

    就是对于一个数,我们去考虑把t*****减到(t-1)9999*的代价. #include<cstdio> #include<cmath> #include<algori ...

  7. XJOI网上同步测试DAY14 T1

    思路:线段树维护最短路 #include<cstdio> #include<cmath> #include<iostream> #include<algori ...

  8. XJOI网上同步训练DAY3 T2

    考试的时候已经想出来怎么做了,但是没有时间打了T_T 思路:我们考虑将询问以lim排序,然后树链剖分,把边作为线段树的节点,然后随着询问lim的增大,改变线段树中节点的信息,然后每次询问我们用树链剖分 ...

  9. XJOI网上同步训练DAY2 T2

    [问题描述] 火车司机出秦川跳蚤国王下江南共价大爷游长沙.每个周末勤劳的共价大爷都会开车游历长沙市. 长沙市的交通线路可以抽象成为一个

随机推荐

  1. Redis分布式缓存 教程以及DEMO

    原文地址:http://blog.csdn.net/qiujialongjjj/article/category/1800171 redis demo源码下载:http://download.csdn ...

  2. NuGet Package 管理工具

    http://npe.codeplex.com/downloads/get/clickOnce/NuGetPackageExplorer.application

  3. Java继承与清理

    [程序实例] import java.util.*; class Characteristic { private String s; Characteristic(String s) { this. ...

  4. JDBC编程之事务处理

    JDBC中的事务处理指的是事务的一致性等问题,例如插入一条数据(id,name,password)到表中,另一条数据(address,id)到另一张表中,并且两条数据是相关联的,那么假设第一条数据插入 ...

  5. 深入解读ESB与SOA的关系

    时至今日,SOA的概念渐渐清晰了.   有关ESB的概念,已经吵了好多年了,还是没有定论. 我个人认为,ESB本来就是抽象的概念,而且内涵丰富,在不同的场合含义不同.因此应该从不同的角度来认识.   ...

  6. Hadoop在Windows环境下的部署[转]

    http://blog.csdn.net/ruby97/article/details/7423088 经过一整天的折腾,参考了网上很多资料,我机器上的Hadoop似乎是配置成功了.下面分享一下详细的 ...

  7. Effective JavaScript Item 30 理解prototype, getPrototypeOf和__proto__的不同

    本系列作为Effective JavaScript的读书笔记. prototype,getPropertyOf和__proto__是三个用来訪问prototype的方法.它们的命名方式非常类似因此非常 ...

  8. Win2 Socket(套接字)相关 API

    Socket(套接字) 作者信息 肖进 单位:南京中萃食品有限公司 资讯部 邮箱:xiaoj@njb.swirebev.com 电话:025-58642091 与socket有关的一些函数介绍 1.读 ...

  9. 配置squid代理服务

    1. 简述一下squid的用途?squid可以做代理和缓存服务器,而做代理时,可以分为正向代理和反向代理.正向代理用在企业办公环境中,企业员工上网通过代理来上网,代理的缓存功能可以为企业节省宝贵的带宽 ...

  10. HDU 5141

    这个题 LIS  +  并查集的思想 + 链式前向星 要求找s(i,j)使i j 能有最长的LIS  ... 做法是枚举每一个j 即终点  算 起点 的可能 无力吐槽了  bc 的时候写错了一个地方 ...