Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
危险的错误阿。。。。Re:帮忙看看哪里错了,程序超容易理解,wa了一百遍阿一百遍。In Reply To:帮忙看看哪里错了,程序超容易理解,wa了一百遍阿一百遍。 Posted by:badboy at 2007-05-16 15:58:40 > #include <cstdio> > #include <algorithm> > #include <memory.h> > using std::sort; > > const int N = 201; > int p[N]; > int rank[N]; > int gold[N]; > int store[N]; > > int n, m; > > void init() > { > for(int i = 1; i <= n; i++) > p[i] = i; > memset(rank, 0x00, sizeof(rank)); > } > > int find_set(int x) > { > if(p[x] == x) > return x; > p[x] = find_set(p[x]); > return p[x]; > } > > void link(int x, int y) > { > if(rank[x] > rank[y]) > { > p[y] = x; > gold[x] += gold[y]; > store[x] += store[y]; > } > else > { > p[x] = y; > if(rank[x] == rank[y]) > rank[y]++; > gold[y] += gold[x]; > store[y] += store[x]; > } > } > > void join(int x, int y) > { > link(find_set(x), find_set(y)); > } > > bool test() > { > for(int i = 1; i <= n; i++) > { > int r = find_set(i); > if(gold[r] > store[r]) > return false; > } > return true; > } > > struct Node > { > int x; > int y; > int d; > bool operator<(const Node &node) const > { > return d<node.d; > } > }; > > Node a[N*N]; > > int main() > { > while(true) > { > scanf("%d", &n); > if(!n) > break; > init(); > int i; > for(i = 1; i <= n; i++) > scanf("%d", gold+i); > for(i = 1; i <= n; i++) > scanf("%d", store+i); > > scanf("%d", &m); > int x, y, d; > for(i = 0; i < m; i++) > { > scanf("%d%d%d", &x, &y, &d); > a[i].x = x, a[i].y = y, a[i].d = d; > } > > if(test()) > { > printf("0\n"); > continue; > } > > sort(a, a+m); > > i = 0; > do > { > join(a[i].x, a[i].y); > }while(!test() && ++i<m); > > if(i >= m) > printf("No Solution\n"); > else > printf("%d\n", a[i].d); > } > } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator