186. [USACO Oct08] 牧场旅行

★★   输入文件:pwalk.in   输出文件:pwalk.out   简单对比
时间限制:1 s   内存限制:128 MB

n个被自然地号码为1..n奶牛(1<=n<=一千)正在同样被方便的号码为1..n的n个牧场中吃草。特别自但是方便的是,第i个奶牛就在第i个牧场中吃草。

当中的某个对牧场被一起的n-1条双向通道的一条连接。奶牛能够由此通道。第i条通道连接的三个牧场是A_i和B_i(1<=A_i<=N;1<=B_i<=N)其长度是L_i(1<=L_i<=10000)。

通道只会三番五次五个例外的牧场,所以这个通道使得全数牧场组合了一棵树。

奶牛们是好交际的盼望能够常常的走访其他奶牛。殷切地,它们希望您能经过报告它们Q(1<=Q<=一千)对牧场的门路来帮衬她们安插旅行。(那里将有Q个询问,p1,p2(1<=p1<=n;1<=p1<=n))

分数:200

难点名称:pwalk

输入格式:

  • 第①行:五个用空格隔离的整数:n和Q
  • 第壹..n行:第i+1行包蕴多少个用空格隔开分离的平头:A_i,B_i和L_i
  • 第n+1..N+Q行:每行李包裹涵多个用空格隔离的整数,代表四个不等的牧场,p1和p2

输入样例(file pwalk.in):

4 2
2 1 2
4 3 2
1 4 3
1 2
3 2

出口格式:

  • 第②..Q行:行i包涵第i个询问的答案。

出口样例:

2
7

输出表明:

问询1:牧场1和牧场2的不二法门长度为2。 询问2:3->4->1->2;总省长为7。

思路:裸SPFA
错误原因:以后数组再开炸了吃屎!!!!!!!!!!!!!!!!!

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<queue>
 6 using namespace std;
 7 const int MAXN=1001;
 8 const int maxn=0x7fffffff;
 9 struct node
10 {
11     int u;
12     int v;
13     int w;
14     int next;
15 }edge[MAXN];
16 int num=1;
17 int head[MAXN];
18 int dis[MAXN];
19 int n,q;
20 int vis[MAXN];
21 int spfa(int bg,int ed)
22 {
23     for(int i=1;i<=n;i++)dis[i]=maxn;
24     memset(vis,0,sizeof(vis));
25     queue<int>q;
26     q.push(bg);
27     dis[bg]=0;
28     vis[bg]=1;
29     while(q.size()!=0)
30     {
31         int p=q.front();
32         q.pop();
33         for(int i=head[p];i!=-1;i=edge[i].next)
34         {
35             int to=edge[i].v;
36             if(dis[to]>dis[p]+edge[i].w)
37             {
38                 dis[to]=dis[p]+edge[i].w;
39                 if(vis[to]==0)
40                 {
41                     q.push(to);
42                     vis[to]=1;    
43                 }
44             }
45         }
46     }
47     return dis[ed];
48 }
49 int main()
50 {
51     freopen("pwalk.in","r",stdin);
52     freopen("pwalk.out","w",stdout);
53     scanf("%d%d",&n,&q);
54     for(int i=1;i<=n;i++)head[i]=-1;
55     for(int i=1;i<n;i++)
56     {
57         scanf("%d%d%d",&edge[num].u,&edge[num].v,&edge[num].w);
58         edge[num].next=head[edge[num].u];
59         head[edge[num].u]=num++;
60         edge[num].v=edge[num-1].u;
61         edge[num].u=edge[num-1].v;
62         edge[num].w=edge[num-1].w;
63         edge[num].next=head[edge[num].u];
64         head[edge[num].u]=num++;
65     }
66     for(int i=1;i<=q;i++)
67     {
68         int bg;
69         int ed;
70         scanf("%d%d",&bg,&ed);
71         printf("%d\n",spfa(bg,ed));
72     }
73     return 0;
74 }

 

 

186. [USACO Oct08] 牧场旅行

★★   输入文件:pwalk.in   输出文件:pwalk.out   简单对比
时间限制:1 s   内存限制:128 MB

n个被自然地号码为1..n奶牛(1<=n<=1000)正在同样被方便的号码为1..n的n个牧场中吃草。尤其自但是方便的是,第i个奶牛就在第i个牧场中吃草。

内部的部分对牧场被一起的n-1条双向通道的一条连接。奶牛能够透过通道。第i条通道连接的三个牧场是A_i和B_i(1<=A_i<=N;1<=B_i<=N)其长度是L_i(1<=L_i<=10000)。

通道只会延续多个例外的牧场,所以那几个通道使得全数牧场结成了一棵树。

奶牛们是好交际的期待能够常常的访问别的奶牛。殷切地,它们希望你能透过报告它们Q(1<=Q<=一千)对牧场的门路来援救她们配备旅行。(那里将有Q个询问,p1,p2(1<=p1<=n;1<=p1<=n))

分数:200

题材名称:pwalk

输入格式:

  • 第一行:七个用空格隔开分离的平头:n和Q
  • 第壹..n行:第i+1行李包裹蕴几个用空格隔开分离的整数:A_i,B_i和L_i
  • 第n+1..N+Q行:每行包含多个用空格隔绝的整数,代表五个差别的牧场,p1和p2

输入样例(file pwalk.in):

4 2
2 1 2
4 3 2
1 4 3
1 2
3 2

输出格式:

  • 第壹..Q行:行i包括第i个询问的答案。

出口样例:

2
7

输出表明:

询问1:牧场1和牧场2的门路长度为2。 询问2:3->4->1->2;总院长为7。

思路:裸SPFA
错误原因:以后数组再开炸了吃屎!!!!!!!!!!!!!!!!!

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<queue>
 6 using namespace std;
 7 const int MAXN=1001;
 8 const int maxn=0x7fffffff;
 9 struct node
10 {
11     int u;
12     int v;
13     int w;
14     int next;
15 }edge[MAXN];
16 int num=1;
17 int head[MAXN];
18 int dis[MAXN];
19 int n,q;
20 int vis[MAXN];
21 int spfa(int bg,int ed)
22 {
23     for(int i=1;i<=n;i++)dis[i]=maxn;
24     memset(vis,0,sizeof(vis));
25     queue<int>q;
26     q.push(bg);
27     dis[bg]=0;
28     vis[bg]=1;
29     while(q.size()!=0)
30     {
31         int p=q.front();
32         q.pop();
33         for(int i=head[p];i!=-1;i=edge[i].next)
34         {
35             int to=edge[i].v;
36             if(dis[to]>dis[p]+edge[i].w)
37             {
38                 dis[to]=dis[p]+edge[i].w;
39                 if(vis[to]==0)
40                 {
41                     q.push(to);
42                     vis[to]=1;    
43                 }
44             }
45         }
46     }
47     return dis[ed];
48 }
49 int main()
50 {
51     freopen("pwalk.in","r",stdin);
52     freopen("pwalk.out","w",stdout);
53     scanf("%d%d",&n,&q);
54     for(int i=1;i<=n;i++)head[i]=-1;
55     for(int i=1;i<n;i++)
56     {
57         scanf("%d%d%d",&edge[num].u,&edge[num].v,&edge[num].w);
58         edge[num].next=head[edge[num].u];
59         head[edge[num].u]=num++;
60         edge[num].v=edge[num-1].u;
61         edge[num].u=edge[num-1].v;
62         edge[num].w=edge[num-1].w;
63         edge[num].next=head[edge[num].u];
64         head[edge[num].u]=num++;
65     }
66     for(int i=1;i<=q;i++)
67     {
68         int bg;
69         int ed;
70         scanf("%d%d",&bg,&ed);
71         printf("%d\n",spfa(bg,ed));
72     }
73     return 0;
74 }

 

 

http://www.bkjia.com/cjjc/1207678.htmlwww.bkjia.comtruehttp://www.bkjia.com/cjjc/1207678.htmlTechArticle186. [USACO Oct08] 牧场旅行,usacooct08 157.
[USACO Nov07] 奶牛跨栏 186. [USACO Oct08] 牧场旅行 ★★ 输入文件:
pwalk.in 输出文件: pwalk.out 简单相比较 时…

157. [USACO Nov07] 奶牛跨栏

157. [USACO Nov07] 奶牛跨栏

186. [USACO Oct08] 牧场旅行,usacooct08

相关文章