代码改变世界

1308. Dependencies among J

2011-05-20 17:16  Min·zc  阅读(148)  评论(0编辑  收藏  举报
 1 /*
 2  *广搜+字符串处理
 3  *开始忘记数字可以是两位数(或者更多位),当成一位数处理,wa了挺长时间
 4  *
 5  *
 6  */
 7 
 8 
 9 #include <iostream>
10 #include <memory.h>
11 #include <string>
12 #include <queue>
13 #include <vector>
14 using namespace std;
15 vector<int> rd[10001];
16 int vi[10001];
17 int ans;
18 int n,m;
19 void set()
20 {
21         memset(rd,0sizeof(rd));
22         memset(vi,0sizeof(vi));
23         string c;
24         char tem;
25         cin>>m;
26         cin.get(tem);
27         for(int i=1;i<=n;i++)
28         {
29                 int k=0;
30                 getline(cin,c);
31                 int len=c.size();
32                 int num=0;
33                 for(int j=0;j<len;j++)
34                 {
35                         
36                         if(c[j]==' ')
37                         {
38                                 rd[i].push_back(num);
39                                 num=0;
40                         }
41                         else
42                         {
43                                 num*=10;
44                                 num+=(c[j]-'0');
45                         //   cout<<"num "<<num<<endl;
46                                 if(j==len-1)
47                                 {
48                                         rd[i].push_back(num);
49                                         num=0;
50                                 }
51                         }
52                 }
53         }
54 
55 }
56 void bfs()
57 {
58         queue<int> q;
59         q.push(m);
60         vi[m]=1;
61         while(!q.empty()) 
62         {
63                 int root=q.front();
64                 q.pop();
65                 ans+=rd[root][0];
66         //     cout<<ans<<endl;
67                 for(int i=1;i<rd[root].size();i++)
68                 {
69                         if(vi[rd[root][i]]==0)
70                         {
71                                 vi[rd[root][i]]=1;
72                                 q.push(rd[root][i]);
73                         }
74                 }
75         }
76 }
77 int main()
78 {
79         while(cin>>n,n!=0)
80         {
81                 ans=0;
82                 set();
83                 bfs();
84                 cout<<ans<<endl;
85         }
86 }