摘要: 大数问题,地址:http://acm.pku.edu.cn/JudgeOnline/problem?id=1306
/** *//***********************************************************************************************无符号大整数类,包括了*和+法,类可以用小整数或者字符串输入,储存方... 阅读全文
摘要: 最大流问题,地址:http://acm.pku.edu.cn/JudgeOnline/problem?id=1274
/**//*距离标号的最大流*/#include <stdio.h>const int LEN = 500;const int MAX = 0x7fffffff;struct{&... 阅读全文
摘要: 最大流问题,地址:http://acm.pku.edu.cn/JudgeOnline/problem?id=1273
/**//*距离标号的最大流*/#include <stdio.h>const int LEN = 201;const int MAX = 0x7fffffff;struct{&... 阅读全文
最小生成树。地址: http://acm.pku.edu.cn/JudgeOnline/problem?id=1251
#include <stdio.h> #include <stdlib.h>
const int LEN = 1000;
typedef struct { int b; int e; int length; }type; type seg[LEN]; int next;
void init () {
next = 0; }
int point[LEN];
void make ( int n ) {
for ( int i=0; i<n; i++ ) { point[i] = -1; } }
int find ( int a ) {
if ( point[a] < 0 ) { return a; } int r = find ( point[a] ); point[a] = r;
return r; }
void un ( int a, int b ) {
int ra = find ( a ); int rb = find ( b );
if ( point[ra] < point[rb] ) { point[ra] += point[rb]; point[rb] = ra; } else { point[rb] += point[ra]; point[ra] = rb; } }
int cmp ( const void *a, const void *b ) {
return ( ( type * )a )->length - ( ( type * )b )->length; }
int kul ( int n ) {
int ans = 0;
qsort ( seg, next, sizeof ( type ), cmp ); make ( n ); for ( int i=0; i< next; i++ ) { if ( find ( seg[i].b ) != find ( seg[i].e ) ) { ans += seg[i].length; un ( seg[i].b, seg[i].e ); } }
return ans; }
int main () {
int n; char chi[5], chj[5]; int len; int in;
while ( scanf ( "%d", &n ) != EOF && n ) { init (); for ( int i=0; i<n-1; i++ ) { scanf ( "%s%d", &chi, &len ); for ( int j=0; j<len; j++ ) { scanf ( "%s%d", &chj, &in ); seg[next].b = chi[0] - 'A'; seg[next].e = chj[0] - 'A'; seg[next++].length = in; } }
printf ( "%d\n", kul ( n ) ); } return 0; }
摘要: 凸包问题的一个应用,地址:http://acm.pku.edu.cn/JudgeOnline/problem?id=1228
#include < stdio.h >#include < stdlib.h >typedef struct{ int ... 阅读全文
摘要: 昨天晚上太卡了,竟然没有全部发完,今天早上早早起来发一下,1113是一个计算几何的题目,求得是凸包问题,就是在二维平面上给定一系列的点,求一个最小的凸包将它们全部覆盖,所谓凸包就是一个多边形,在这个多边形内的任意两点间的连线都在多边形内。地址:http://acm.pku.edu.cn/JudgeOnline/problem?id=1113
#include < std... 阅读全文
NOI的题目,并查集的高级应用,很好玩的一个题目。题目:http://acm.pku.edu.cn/JudgeOnline/problem?id=1182
#include "stdio.h" int num[50005]; int dis[50005]; int relation1[3]={0,1,2}; /**//*正权*/ int relation2[3]={0,2,1}; /**//*负权*/ void make(int p) { int i; for(i=0;i<p;i++) { num[i]=-1; dis[i]=0; } } int find(int p) { int i; if(num[p]<0)return p; i=find(num[p]); dis[p]=dis[p]+dis[num[p]]; num[p]=i; return i; } void un(int a,int b,int len) { int ra=find(a); int rb=find(b); num[rb]=ra; dis[rb]=dis[a]+len-dis[b]; } int main() { int n,k,i; int x,y,d; int rx,ry; int dx,dy; int count; scanf("%d%d",&n,&k); make(n);count=0; for(i=0;i<k;i++) { scanf("%d%d%d",&d,&x,&y); if(x>n||y>n)count++; else { rx=find(x-1); ry=find(y-1); if(d==1) { if(rx!=ry)un(x-1,y-1,0); else { if(dis[x-1]<0)dx=relation2[(-dis[x-1])%3]; else dx=relation1[dis[x-1]%3]; if(dis[y-1]<0)dy=relation2[(-dis[y-1])%3]; else dy=relation1[dis[y-1]%3]; if(dx!=dy)count++; } } else { if(rx!=ry)un(x-1,y-1,1); else { if(dis[x-1]<0)dx=relation2[(-dis[x-1])%3]; else dx=relation1[dis[x-1]%3]; if(dis[y-1]<0)dy=relation2[(-dis[y-1])%3]; else dy=relation1[dis[y-1]%3]; if((dx+1)%3!=dy)count++; } } } } printf("%d\n",count); return 0; }
摘要: 一个计算机和的题目,要做的事最多有多少个点共线,做法是对线段进行排序,然后查找。注意HASH。
#include < stdio.h >#include < stdlib.h >typedef struct{ int x; &... 阅读全文
|
|
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
---|
24 | 25 | 26 | 27 | 28 | 29 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 1 | 2 | 3 | 4 | 5 |
|
公告
决定从线程开始!!
常用链接
留言簿(6)
随笔档案
搜索
最新评论
阅读排行榜
评论排行榜
|
|