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,0, sizeof(rd));
22 memset(vi,0, sizeof(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 }
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,0, sizeof(rd));
22 memset(vi,0, sizeof(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 }