11.10模拟

得了92.5分。辣鸡。懒惰的我不想去掉红字了,凑合着看吧。

 题解:考试的时候想用搜索做,写min函数的时候定义成了bool型,,找了半天错误,咋就是返回1.然后还是可爱的小qg提醒,才知道要处理环。

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<ctime>
#define N 10010
#define M 100010
#define ll long long
using namespace std;
int n,m,cnt(0);
ll v[N];
int num[N][2];
ll minn;
bool f[N]={0},vis[N];
struct node
{
    int z;
    int x,y;

}a[M];
int min(ll x,ll y)
{
    if (x<y) return x;
    else return y;
}
ll dfs(int ki)
{
    if (clock()>900)
      {
           printf("%d\n",f[1]);
           fclose(stdin);
           fclose(stdout);
           return 0;
      }
    if (vis[ki]) return v[ki];
    if (!f[ki]) return v[ki];
    for (int i=num[ki][0];i<=num[ki][1];i++)
      {
          vis[ki]=1;
          v[ki]=min(v[ki],dfs(a[i].x)+dfs(a[i].y));
          vis[ki]=0;
      }
    f[ki]=1;
    return v[ki];
}
bool cmp(node c,node d)
{
    if (c.z<d.z) return 1;
    else return 0;
}
int main()
{
    freopen("dwarf.in","r",stdin);
    freopen("dwarf.out","w",stdout);

    scanf("%d%d",&n,&m);
    for (int i=1;i<=n;i++) scanf("%lld",&v[i]);
    for (int i=1;i<=m;i++)
      scanf("%d%d%d",&a[i].z,&a[i].x,&a[i].y);
    sort(a+1,a+m+1,cmp);
    for (int i=1,k;i<=m;i++)
      {
           k=a[i].z;
           if (!f[k]) f[k]=1,num[a[i-1].z][1]=i-1,num[k][0]=i;
      }
    num[a[m].z][1]=m;
    minn=dfs(1);
    cout<<minn<<endl;

    fclose(stdin);
    fclose(stdout);

    return 0;
}

考场上辣鸡的超时搜索(72.5)

 题解:看了正解之后,哦豁,好神奇,还能用spfa求。由于x,y能合成v,所以x—>v,距离是y;y->v,距离是x。然后跑最短路,这个最短距离就是得到物品i的最小代价。输出到1的最短距离即为解。

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#define N 100010
#define ll long long
using namespace std;
int n,m,Head(0),tail(0),num(0);
int vi[N],dis[N],head[N]={0},team[N];
bool f[N]={0};
struct node
{
    int v,t,pre;
}e[N*2];
void add(int to,int from,int dis)
{
    e[++num].v=to;
    e[num].t=dis;
    e[num].pre=head[from];
    head[from]=num;
}
void spfa()
{
    for (int i=1;i<=n;i++)
      {
           dis[i]=vi[i];
           team[++tail]=i;
           f[i]=1;
      }
    while (Head<=tail)
      {
           int k=team[++Head];
           f[k]=0;
           for (int i=head[k];i;i=e[i].pre)
             {
                   int v=e[i].v;
                   if (dis[v]>dis[k]+dis[e[i].t])
                     {
                         dis[v]=dis[k]+dis[e[i].t];
                         if (f[v]==0)
                           {
                              f[v]=1;
                         team[++tail]=v;
                      }
                }
             }
      }

}
int main()
{
    freopen("dwarf.in","r",stdin);
    freopen("dwarf.out","w",stdout);

    scanf("%d%d",&n,&m);
    for (int i=1;i<=n;i++) scanf("%d",&vi[i]);
    for (int i=1;i<=m;i++)
      {
           int v,x,y;
           scanf("%d%d%d",&v,&x,&y);
           add(v,x,y);
           add(v,y,x);
      }
    spfa();
    printf("%d\n",dis[1]);

    fclose(stdin);
    fclose(stdout);

    return 0;
}

神奇的spfa

时间: 2024-11-03 20:48:52

11.10模拟的相关文章

[11.10模拟赛]T1

Description 小\(W\)终于学会了魔术, 她迫不及待的想要给你展示一下,小\(W\)的魔术是这样的: 她可以删去一个字符串的任意一个连续子串(可以为空) , 然后把剩下的部分按顺序拼接成一个字符串. 小\(W\)由于刚刚学会魔术, 她只能使用一次. 小\(W\)还有一个特别喜欢的字符串\(s\),如果使用一次魔术之后剩下的字符串就是\(s\),小\(W\)就会对自己的魔术感到满意,但是并不是所有字符串可能让小\(W\)感到满意. 小\(W\)想知道长度为\(n\)的只由小写字母组成的

2017.6.11 校内模拟赛

题面及数据及std(有本人的也有原来的) :2017.6.11 校内模拟赛 T1 自己在纸上模拟一下后就会发现 可以用栈来搞一搞事情 受了上次zsq 讲的双栈排序的启发.. 具体就是将原盘子大小copy一下排个序 用两个指针维护两个数组(原数据 和 排序后的数据), 即分为1数据和2数组 将小于1指针指向的数据的2数组中的数据全部压入栈中 后进行消除, 将栈栈顶元素与当前1数组中的1指针指向的元素进行比较 相同则消除 后重复过程 直至指针超过N 后判断一下是否两个指针都超过了N... #incl

ubuntu 11.10 安装apache2 tomcat6

ubuntu 11.10 安装apache2 tomcat6 导读 Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun 和其他一些公司及个人共同开发而成.由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范.因为Tomcat 技术先进.性能稳定,而且免费,因而深受Java

Centos6.7安装nginx-1.11.10

yum grouplist #查看已经安装的组 Installed Groups:  #已经安装的组 Available Groups:    #可以安装的组 同步系统时间 编译安装nginx 安装#yum -y groupinstall "Development Tools" "Server Platform Libraries" #tar xf nginx-1.10.2.tar.gz #cd nginx-1.10.2 #groupadd -r -g 108 ng

nginx-1.11.10 download, install, start and stop

Environment:(CentOS 7) 1 [[email protected]_x1 nginx-1.11.10]$ uname -a 2 Linux netlab_x1 3.10.0-327.28.2.el7.x86_64 #1 SMP Wed Aug 3 11:11:39 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux Download: 1 # download and uncompress 2 wget http://nginx.org/downl

Ubuntu 11.10 (Oneiric)上编译带utrace补丁的内核 转

Ubuntu 11.10 (Oneiric)上编译带utrace补丁的内核 首先准备linux内核编译环境: sudo apt-get install fakeroot build-essential crash kexec-tools makedumpfile kernel-wedge kernel-package sudo apt-get build-dep linux sudo apt-get install git-core libncurses5 libncurses5-dev lib

Ubuntu 11.10 安装GMONE3,卸载 UNITY和UNITY 2D

Ubuntu 11.10安装GNOME3: 1)sudo apt-get install gnome-shell sudo apt-get install gnome-themes* (或者简单的选择 sudo apt-get install gnome-themes-standard) sudo apt-get install gnome-tweak-tool 2)sudo apt-get install gnome-session-fallback 卸载 UNITY和UNITY 2D: su

Ubuntu 11.10 Server下搭建Maven私服

安装Nexus服务的文档可以参考官方站点:http://www.sonatype.com/books/nexus-book/reference/install-sect-install.html 相关阅读: Ubuntu Maven安装与配置 http://www.codesky.net/Linux/2011-07/38964.htm 1.下载并安装Nexus在Ubuntu 11.10 server上,下载Nexus最新版本.和官方文档不一样的地方是,我将nexus放在了/usr而不是/usr/

Bentley OpenPlant PowerPID V8i SS5 08.11.10.427 1CD智能管道与仪表设计解决方案

Bentley OpenPlant PowerPID V8i SS5 08.11.10.427 1CD智能管道与仪表设计解决方案 OpenPlant PowerPID 是一款易于使用.由数据驱动的应用程序,可快速生成智能 P&ID,使用户能够捕获与重用开放格式的 信息.它可减少创建这些重要文档所需的时间并可在整个资产生命周期内共享所有流程信息.由于 OpenPlant PowerPID 是 围绕 ISO 15926 开放式数据架构而设计的第一款智能 P&ID 软件,因此,在 PowerPI