1062
来源:互联网 发布:用java编写窗口猜数字 编辑:程序博客网 时间:2024/05/21 04:20
研究了好久。。。最后看了大牛的思路才写出来
#include <iostream>
#include <string.h>#include <stdio.h>
using namespace std;
int thing[100000 + 10];
int map[105][105];
bool vis[105];
bool ok[105];
int N,M,K,P,L,T,V,X;
int dis[105];
int dij()
{
memset(dis, 0x1f1f, sizeof(dis));
memset(vis, 0, sizeof(vis));
for( int i = 0; i<= N ;i++)
dis[i] = map[1][i];
vis[1] = true;
//for( int j = 0; j<= N ;j++)
// cout<<dis[j]<<endl;
for( int i = 0; i<= N; i++)
{
int minx = 0x1f1f;
int pos = 1;
for( int j = 0 ; j <= N ;j++)
{
if( !vis[j] && minx > dis[j] && ok[j])
{
minx = dis[j];
pos = j;
}
}
vis[pos] = true;
for( int j = 0; j<= N ; j++)
{
if(!vis[j] && ok[j] && dis[j] > dis[pos] + map[pos][j])
{
dis[j] = dis[pos] + map[pos][j];
//cout<<j<<"____________"<<dis[j]<<"dis[j]"<<endl;
}
}
}
//cout<<dis[0]<<endl;
return dis[0];
}
int main()
{
while(scanf("%d %d",&M, &N)!=EOF)
{
memset(map, 0x1f1f, sizeof(map));
for( int i = 1; i<= N; i++)
{
scanf("%d %d %d",&P, &L, &X);
thing[i] = L;
map[i][0] = P;
for( int j = 1; j <= X; j++)
{
scanf("%d %d",&T, &V);
map[i][T] = V;
}
}
int minx = 100000;
for( int i = 0; i <= M ; i++)
{
memset(ok,0,sizeof(ok));
for( int j = 1; j <= N ;j++)
{
if(thing[j] >= thing[1] - M + i && thing[j] <= thing[1] + i)
{
ok[j] = true;
//cout<<"k"<<j<<endl;
}
else
ok[j] = false;
}
ok[0] = true;
int res = dij();
if(minx > res)
minx = res;
}
printf("%d\n",minx);
}
return 0;
}
0 0
- 1062
- 1062
- 1062
- 1062
- 1062
- pku 1062
- POJ 1062
- POJ 1062
- poj-1062
- POJ 1062
- poj 1062
- poj 1062
- POJ 1062
- poj 1062
- HDU 1062
- HDU 1062
- poj 1062
- poj 1062
- Java排序算法(十):桶式排序
- C++程序设计(2)之数据类型和表达式
- Highly Available IP (HAIP) FAQ for release 11.2 (Doc ID 1664291.1)
- 有一段文本,将文本中的所有单词,存放到一个字符指针数组中(要求每个单词内存恰好)
- Java集合源码学习(18)_Map接口
- 1062
- 娓娓道来c指针 (8)开发可变参数函数
- hdu 2192 MagicBuilding
- 杭电oj 2034 水过
- unity3D游戏开发实战原创视频讲座系列13之帽子戏法游戏开发(预告)
- hdu1242 Rescue DFS(路径探索题)
- LDAP Error Code List
- 杭电ACM 2100 Lovekey
- 近几天在andriod的学习过程中遇到的一些细节