zoukankan      html  css  js  c++  java
  • NOIP2012普及组 (四年后的)解题报告 -SilverN

    本章施工仍未完成

    现在的时间是3.17 0:28,我困得要死

    本来今天(昨天?)晚上的计划是把整个四道题的题解写出来,但是到现在还没写完T4的高效算法,简直悲伤。

    尝试了用floyd写T4,终于大功告成AC后,看到别人的解题报告说fl能过只是因为测试数据范围小。

    好像主要有三种解法,fl,dij,dfs

    dfs暂时弃,dij写到现在还没完成,先把fl的放上来。

    等攻下T4,再施工前面三道题

    T4-Floyd:

    读完数据以后,只要把文化不兼容的城市的路都堵上,就可以用floyd了

    可怜我之前堵路无方,写了一大堆判定条件还没见效……

    AC代码如下

     1 /*NOIP普及组2012 t4 culture*/
     2 //根据多个解题报告所说,floyd算法能过只是因为数据范围小
     3 //我们需要dij或者dfs 
     4 #include<iostream>
     5 #include<algorithm>
     6 #include<cmath>
     7 using namespace std;
     8 const int inf=10000000;
     9 int c[5000];//文明[i]的文化 
    10 int fl[300][300];//文化拒绝 
    11 int mp[300][300];//12 //int DFS(){
    13     
    14 //}
    15 int main(){
    16     int i,j,n,k,m,s,t;
    17 //    freopen("culture.in","r",stdin);
    18 //    freopen("culture.out","w",stdout);
    19     //in
    20     scanf("%d%d%d%d%d",&n,&k,&m,&s,&t);
    21     for(i=1;i<=n;i++){
    22         scanf("%d",&c[i]);
    23     }
    24     for(i=1;i<=n;i++)
    25      for(j=1;j<=n;j++){
    26          if(i!=j)mp[i][j]=inf;//预处理 
    27      }
    28     for(i=1;i<=k;i++)
    29      for(j=1;j<=k;j++)
    30        scanf("%d",&fl[i][j]);//读入文化兼容情况 
    31 
    32     for(i=1;i<=m;i++){
    33         int u,v,d;
    34         scanf("%d%d%d",&u,&v,&d);
    35         mp[u][v]=min(mp[u][v],d);//两座城市间若有多条道路,记录最短的即可 
    36         mp[v][u]=mp[u][v];//双向图 
    37     }
    38     for(i=1;i<=n;i++)
    39      for(j=1;j<=n;j++){
    40          if(fl[c[i]][c[j]]==1)mp[j][i]=inf;//如果文化不兼容,相当于道路不通
    41          //刚开始mp[j][i]误打成mp[i][j],费了半天时间查错 
    42          //这部分原本想边读边处理,但是发现会影响到双向距离处理,只好单拿出来了 
    43      }
    44     //
    45     //floyd 不能走的路之前都处理成inf了,直接floyd就行 
    46     for(k=1;k<=n;k++)
    47       for(i=1;i<=n;i++)
    48         for(j=1;j<=n;j++){
    49             if(mp[i][k]+mp[k][j]<mp[i][j]){
    50                 mp[i][j]=mp[i][k]+mp[k][j]; 
    51             }
    52         }
    53     //
    54     if(mp[s][t]==inf)printf("-1");
    55     else printf("%d",mp[s][t]);
    56 //    fclose(stdin);
    57 //    fclose(stdout);
    58     return 0;
    59     
    60 }
  • 相关阅读:
    【BZOJ-4422】Cow Confinement 线段树 + 扫描线 + 差分 (优化DP)
    【BZOJ-2521】最小生成树 最小割
    mtools使用-1
    关于nodejs DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version. To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect.
    学习RUNOOB.COM进度二
    学习RUNOOB.COM进度一
    深入了解jQuery Mobile-3装载器
    深入了解jQuery Mobile-1
    mongodb的学习之旅一
    支付回调内容
  • 原文地址:https://www.cnblogs.com/AwesomeOrion/p/5285834.html
Copyright © 2011-2022 走看看