zoukankan      html  css  js  c++  java
  • 51Nod 1693 水群

    1693 水群

    题意是求从1状态到n状态最少需要多少体力

    可以以体力建边,跑最短路

    每个点向他的质数倍数(质数k<=13)连边,并向这个点-1连边

    spfa

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define maxn 1000000+15
     4 int n,m,dis[maxn],p[6]={2,3,5,7,11,13};
     5 
     6 void spfa(int s)
     7 {
     8     queue<int>que;
     9     bool vis[maxn];
    10     memset(dis,0x3f,sizeof(dis));
    11     memset(vis,false,sizeof(vis));
    12     dis[s]=0; vis[s]=true;
    13     que.push(s);
    14     while(!que.empty())
    15     {
    16         int cur=que.front(); que.pop();
    17         for(int i=0;i<6;i++)
    18         {
    19             if(cur*p[i]<n+4&&dis[cur]+p[i]<dis[cur*p[i]])
    20             {
    21                 dis[cur*p[i]]=dis[cur]+p[i];
    22                 if(!vis[cur*p[i]])
    23                 {
    24                     vis[cur*p[i]]=true;
    25                     que.push(cur*p[i]);
    26                 }
    27             }
    28             
    29         }
    30         if(dis[cur]+1<dis[cur-1]&&cur>0)
    31         {
    32             dis[cur-1]=dis[cur]+1;
    33             if(!vis[cur-1])
    34             {
    35                 vis[cur-1]=true;
    36                 que.push(cur-1);
    37             }
    38         }
    39         vis[cur]=false;
    40     }
    41 }
    42 
    43 int main()
    44 {
    45     scanf("%d",&n);
    46     spfa(1);
    47     printf("%d
    ",dis[n]);
    48     return 0;
    49 }
    View Code
  • 相关阅读:
    cookie行为试验(一)
    指针内容的引用
    多线程协同
    xss攻击
    _com_error e
    操作符重载
    c++对象中的成员变量地址分布
    常对象指针
    COM调用2
    cookie行为试验(二)
  • 原文地址:https://www.cnblogs.com/chen74123/p/7511016.html
Copyright © 2011-2022 走看看