NOIP2012普及组 (四年后的)解题报告 -SilverN

Posted 报告振兴哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }

 

以上是关于NOIP2012普及组 (四年后的)解题报告 -SilverN的主要内容,如果未能解决你的问题,请参考以下文章

NOIP1999普及组解题报告

NOIP2002普及组解题报告

NOIP2016普及组复赛解题报告

NOIP2000普及组解题报告

NOIP1998普及组解题报告

NOIP2001普及组解题报告