NOIP 2012 普及组 复赛 culture 文化之旅
来源:互联网 发布:python egg 打包 编辑:程序博客网 时间:2024/05/13 02:58
NOIP 2012 普及组 复赛 culture 文化之旅
1.找寻迪杰斯特拉(Dijkstra)算法,难度适中,过程中,找到该题。
2.结合题意,弄懂输入输出样例是关键一步。
3.为了能解决2,纸笔是必须的。
4.读该题样例输入部分,感觉有点象栈,需要相当的记忆。编程,对锻炼大脑,栈的记忆,有很大作用。
5.该题的数据比较水,n<=100,n^2<=10000,所以超时一般不会。
6.该题可以看作有条件约束的最短路径。
7.该题的难想之处,在于将aij=1转化为,两国之间路径为INF。
8.可采用Dijkstra算法,但Floyd算法写起来更简单。
9.因其起点,终点位置未定,故综合考虑,采用Floyd算法。
10.此题需注意的一句:距离为 d 的可双向通行的道路。请注意双向两字。
11.还有一句需注意:aij= 1 表示文化 i 排斥外来文化 j。请注意外来两字。
12.该题需注意,一番数据处理后,还是回归基本的最短路径问题。
附上AC代码,编译环境Dev-C++4.9.9.2
#include <stdio.h>
#define INF 999999
int main(){
int n,k,m,s,t;
int c[100+10];
int a[100+10][100+10];
int e[100+10][100+10];
int i,j,q;
int u,v,w;
scanf("%d%d%d%d%d",&n,&k,&m,&s,&t);
for(i=1;i<=n;i++)
scanf("%d",&c[i]);
for(i=1;i<=k;i++)
for(j=1;j<=k;j++)
scanf("%d",&a[i][j]);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++){
if(i==j)
e[i][j]=0;
else
e[i][j]=INF;
}
for(i=1;i<=m;i++){
scanf("%d%d%d",&u,&v,&w);
e[u][v]=w;
e[v][u]=w;
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(i!=j&&a[c[j]][c[i]]==1)
e[i][j]=INF;
for(q=1;q<=n;q++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(e[i][j]>e[i][q]+e[q][j])
e[i][j]=e[i][q]+e[q][j];
if(e[s][t]<INF)
printf("%d\n",e[s][t]);
else
printf("-1\n");
return 0;
}
- NOIP 2012 普及组 复赛 culture 文化之旅
- [普及] NOIP 2012 文化之旅
- 2012 NOIP普及组T4 文化之旅
- [NOIP] [最短路] [SPFA] NOIP2012Junior 文化之旅 (culture)
- 沐枫NOI 2835. 文化之旅(2012年NOIP普及组4) 最短路
- culture文化之旅
- NOIP 2012 普及组 复赛 prime 质因数分解
- 【NOIP普及组】2016模拟考试(10.29)——文化之旅
- NOIP-2016-普及组 复赛题解
- [NHZXOI2017]2016NOIP普及组复赛题解
- NOIP 2004 普及组 复赛 FBI树
- NOIP 2002 普及组 复赛 级数求和
- NOIP 2015 普及组 复赛 coin 金币
- NOIP 1998 普及组 复赛 三连击
- NOIP 1997 普及组 复赛 棋盘问题
- NOIP 2002 普及组 复赛 选数
- NOIP 1999 普及组 复赛 Cantor表
- NOIP 2003 普及组 复赛 table 乒乓球
- Backward Digit Sums POJ
- Excel学习-函数精讲课程
- Zenq系列FPGA双核ARM裸机异步程序实现
- rsync
- 感知机实现Python
- NOIP 2012 普及组 复赛 culture 文化之旅
- BZOJ 2456, Mode
- 一步步写水面渲染(二)
- 多路查找树之2-3树(理论)
- 关于 临时变更项目名字,项目要怎么改!
- 正则表达式
- 【taotao】linux下安装Nginx
- 【洛谷1629】 邮递员送信
- 浅谈网络编程