
POJ
南宫嘉俊
学生
展开
-
POJ 1950
DessertTime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 5473 Accepted: 2048DescriptionFJ has a new rule about the cows lining up for dinner. Not only m原创 2016-07-02 08:26:22 · 514 阅读 · 0 评论 -
POJ 1543 Perfect Cubes
暴力水过#include#include#includeusing namespace std;int main(){ int n; while(scanf("%d",&n)!=EOF) { int a,b,c,d; for(a=2;a<=n;a++) { for(b=2;b<a;b++)原创 2015-09-29 13:31:21 · 403 阅读 · 0 评论 -
POJ 3660 Cow Contest
题意:有n个数,m个关系;接下来的关系就是表示a比b厉害,问你最后又多少个可以确定排名的了分析:我的思路是先把他们的关系初始化为无限大,然后可以确定关系的为改为1,让后floyd,动态方程为w[i][j]=min(w[i][j],max(w[i][k],w[k][i]));最后把无限大的数变成0,最后求有多少个数是其他点到他的距离为s1,他到其他店的距离为s2, 如果s1+s2==n-1,c原创 2015-09-08 17:59:49 · 289 阅读 · 0 评论 -
POJ 1797 Heavy Transportation
思路:题目意思很简单,n个顶点,m条路,每条路上都有最大载重限制,问1->n最大载重量。其实就是一最短路的变形,定义weight[i]表示源点到顶点i的最大载重量,初始化为0,之后不断去更新就行了。/*题意:求最小生成树的最大值,可以用spfa算法过*/#include#include#include#include#includeusing namespace std;cons原创 2015-09-08 16:03:35 · 277 阅读 · 0 评论 -
POJ 2549 Sumsets
中途相遇法随便搞搞#include#include#includeusing namespace std;#define N 1005int a[N];const int inf=1<<29;int main(){ int n; while(scanf("%d",&n)!=EOF&&n) { int i,j,k,l; for(原创 2015-09-13 15:34:38 · 488 阅读 · 0 评论 -
POJ 1833 排列
关于next_permutation的用法#include#include#includeusing namespace std;#define N 1025int a[N];int main(){ int t; scanf("%d",&t); while(t--) { int n,k; scanf("%d%d",&原创 2015-09-13 14:56:00 · 471 阅读 · 0 评论 -
POJ-2481-Cows
//树状数组 给你一些区间,问,对于给出的每个区间,有多少个区间是完全包含它的。 先将S从小到大排序,E从大到小排序,这样就可以保证在放入一个区间里,前面所以放下的区间的左端点都是小于等于它的。那么,这时候查询,有多少个区间的右端点是大于等于它的右端点的,就可以得出答案。 需要注意的是,在查询的时候,如果当前区间和前面一个区间是完全相同的话,那么直接将前原创 2015-08-22 14:58:00 · 341 阅读 · 0 评论 -
POJ 2196 Specialized Four-Digit Numbers
题意:求2992到10000之间,10进制,12进制,16进制各位数之和相同的数,输出来#include#include#includeusing namespace std;#define N 20int a[N];int i;void f(int x){ int temp=i; while(temp!=0) { a[x]+=temp%x;原创 2015-09-07 11:12:50 · 245 阅读 · 0 评论 -
POJ 3259 Wormholes
/*题意:John的农场里有n块地和m条路双向路以及w个虫洞,虫洞是一条单向路,不但会把你传送到目的地,而且时间会倒退T秒。我们的任务是知道会不会在从某块地出发后又回来,看到了离开之前的自己。说下输入:n块地,m条边,w个虫洞。下面依次是m条边的信息(双向),输入完后是w个虫洞的信息(单向)。思路:spfa。由于存在负权边,Dijkstra便不能用了。简化题目->就是看图中有没有负权环,有的话原创 2015-09-07 14:28:04 · 234 阅读 · 0 评论 -
POJ 2251 Dungeon Master
题意:就是一个三维最短路,求S点到E点的最短距离。一个BFS直接水过#include#include#includeusing namespace std;const int maxm=50;char map[maxm][maxm][maxm];int vis[maxm][maxm][maxm];int p,n,m;int x1,y1,z1,x2,y2,z2;struct nod原创 2015-09-12 13:18:16 · 318 阅读 · 0 评论 -
POJ 2502 Subway
题目大意:首先给你两个坐标,一个是你家里的坐标,一个是你学校的坐标,然后接下来有若干条地铁线,每条地铁线上有若干个站点,给出每个站点的坐标,有这些点,这些点当中有距离,这个距离的单位是米,现在告诉你走路是10km/h,做地铁的话是40km/h,问你从家里到学校所花费的最短时间(分钟)解题思路:这个主要是卡的输入,只要将输入弄好了,构成一张图就好做了,然后需要注意的是,对于地铁线,你从1站到原创 2015-09-06 23:36:29 · 293 阅读 · 0 评论 -
HDU 1024 Max Sum Plus Plus
题意:将一个有n个数的数组分为m段,求这m段的最大和#include#include#includeusing namespace std;const int maxm=1e6+10;int dp[maxm];int c[maxm];int a[maxm];int main(){ int m,n; while(scanf("%d%d",&m,&n)!=EOF)原创 2015-09-15 15:01:04 · 282 阅读 · 0 评论 -
POJ 3270 Cow Sorting(置换群问题)
//离散数学中的置换群问题,找循环节个数。两种情况,1:找循环节中最小值,s-Min+(len-1)*Min。2:用数列中的最小值s+Min+(len+1)*MIN。取最小和#include#include#includeusing namespace std;const int maxm=1e5+10;const int inf=1<<29;int vis[maxm];struc原创 2015-10-08 11:08:10 · 386 阅读 · 0 评论 -
POJ 3126 Prime Path
Prime PathTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 16065 Accepted: 9068DescriptionThe ministers of the cabinet were quite upset by the message fr原创 2016-05-20 15:00:30 · 420 阅读 · 0 评论 -
POJ 3259 Wormholes(最短路)
Language:DefaultWormholesTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 41408 Accepted: 15221DescriptionWhile exploring his many farms, Farmer Jo原创 2016-05-18 08:48:47 · 344 阅读 · 0 评论 -
POJ 2828 Buy Tickets(线段树)
题意:n个人排队,每个人有一个权值,给出他们插队的位置,求最后的顺序,按顺序输出权值。解:逆着想,最后一个人插队后, 他的位置就是确定了下来的。倒数第二个人插的话,位置在最后一个的前面,最后一个对他无影响,位置在最后一个后面,则最后一个对他有影响,他必须往后移一位。#include#include#includeusing namespace std;const int maxm=2e原创 2015-12-08 16:56:36 · 300 阅读 · 0 评论 -
POJ 1861 Network(KUS算法)
简单的最短路,不过,这题的OUTPUT是错的,要注意。#include#include#includeusing namespace std;const int maxm=1e5;int p[maxm];int X[maxm],Y[maxm];int m,n;int MIN;int num;struct node{ int u,v,w;}t[maxm];int c原创 2015-10-14 21:06:23 · 320 阅读 · 0 评论 -
POJ 1465 Multiple(BFS+同于定理+打印路径)
BFS+同于定理。(看了解题报告才会的),这题实在太巧妙#include#include#includeusing namespace std;const int maxm=1e4+10;int vis[maxm];int d[maxm];int m,n;int ok;struct node{ int pre; int yu; int dig;}que原创 2015-10-13 22:06:01 · 482 阅读 · 0 评论 -
POJ 1659 Frogs' Neighborhood(Havel_Hakimi定理,图论基础)
Havel定理描述给定一个非负整数序列{d1,d2,...dn},若存在一个无向图使得图中各点的度与此序列一一对应,则称此序列可图化。进一步,若图为简单图,则称此序列可简单图化。可图化的判定比较简单:d1+d2+...dn=0(mod2)。关于具体图的构造,我们可以简单地把奇数度的点配对,剩下的全部搞成自环。可简单图化的判定,有一个Havel定理,是说: 我们把序列排成不增序,即d1>原创 2015-10-12 11:16:11 · 389 阅读 · 0 评论 -
POJ 2777 Count Color(区间覆盖和区间查询)
这题很巧,要用位运算。#include#include#includeusing namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1const int maxm=1e5+10;int add[maxm<<2];int sum[maxm<<2];char s[3];int cnt;void pushup(原创 2015-09-22 19:05:07 · 329 阅读 · 0 评论 -
POJ 3624 Charm Bracelet(01背包裸题)
#include#include#includeusing namespace std;const int maxm=1e6+10;int dp[maxm];int w[maxm];int v[maxm];int main(){ int m,n; while(scanf("%d%d",&m,&n)!=EOF) { memset(dp,0,s原创 2015-11-12 11:33:38 · 354 阅读 · 0 评论 -
POJ 2488 A Knight's Journey
读懂题意就知道是一个简单的DFS了#include#include#includeusing namespace std;#define N 30int vis[N][N];int a[N][N];int m,n;int ok;int dir[8][2] = {{-1,-2},{1,-2},{-2,-1},{2,-1},{-2,1},{2,1},{-1,2},{1,2}};vo原创 2015-09-19 16:57:30 · 270 阅读 · 0 评论 -
POJ 1190 生日蛋糕
#include#include#includeusing namespace std;const int maxm=1e4+10;const int inf=1<<29;int mins[maxm],minv[maxm];int n,m;int bests;void dfs(int s,int v,int level,int r,int h){ if(level==0原创 2015-09-19 16:09:53 · 303 阅读 · 0 评论 -
HDU 1950 Bridging signals
题意:就是求最长上升子序(用nlogn)#include#include#includeusing namespace std;const int maxm=1e7;int a[maxm],dp[maxm],n,b[maxm];int EF(int len,int k){ int left=1,right=len; while(left<=right) {原创 2015-09-10 14:54:52 · 307 阅读 · 0 评论 -
POJ 1502 MPI Maelstrom
题意:给你一个不完全的矩阵,数字表示权值,x表示两点间不可达,由于自身到自身花费的时间为0,所以没有给出,由于i到j和j到i距离相同,互达时间相同,所以只给出了一半的临界矩阵。根据给你的这个临界矩阵,让你来求从点1到其他点所花费最短时间集里面的的最大值。其实这是一个很直接的最短路。#include#include#includeusing namespace std;#define N 1原创 2015-09-05 23:08:32 · 299 阅读 · 0 评论 -
POJ 2253 Frogger
题目大意:给出两只青蛙的坐标A、B,和其他的n-2个坐标,任一两个坐标点间都是双向连通的。显然从A到B存在至少一条的通路,每一条通路的元素都是这条通路中前后两个点的距离,这些距离中又有一个最大距离。现在要求求出所有通路的最大距离,并把这些最大距离作比较,把最小的一个最大距离作为青蛙的最小跳远距离。分析:Floyd算法用Floyd算法求出两两最短路,再求出从每个点开始的最长路,最原创 2015-09-09 10:04:28 · 275 阅读 · 0 评论 -
POJ-2387 Til the Cows Come Home
//这道题诗裸的dij,但是坑点就是要考虑重边问题,值得纪念//AC代码:#include#include#includeusing namespace std;#define N 1005const int inf=1<<29;int vis[N],w[N][N],d[N];int t,n;void dij(){ int i,j; for(i=1;i<=原创 2015-08-31 22:11:58 · 358 阅读 · 0 评论 -
POJ 1789 Truck History
//题意:历史上,曾用7个小写字母来表示每种truck的型号,每两种型号之间的差距为字母串中不同字母的个数。现在给出n种不同型号的truck,问怎样使1/Σ(to,td)d(to,td)的值最小。//AC代码:#include#include#includeusing namespace std;#define N 2005int p[N];char s[N][原创 2015-08-29 09:03:38 · 302 阅读 · 0 评论 -
POJ 2031 Building a Space Station
//这道题并不难,注意细节就能一次AC//AC代码:#include#include#include#includeusing namespace std;#define N 100000int p[N],n;int L;struct node{ double r,x,y,z,c,d; int k,k1,k2;}t[N],T[N];double c原创 2015-08-28 16:48:21 · 257 阅读 · 0 评论 -
POJ 2421 Constructing Roads
//思路:把联通了的两个点的权值标记成0,然后用克鲁斯卡尔算法过或者其他的算法也行//AC代码:#include#include#includeusing namespace std;#define N 200005int n,p[N],L,a[200][200];struct node{ int w,v,c;}t[N];int cmp(node p,node原创 2015-08-28 15:48:49 · 316 阅读 · 0 评论 -
POJ 2828 Buy Tickets
题意:第一行是整数N,代表队伍一共有N个人。然后N行,第一个数字代表N进队的时候前边有几个人,第二个数字是第I个人的标识符。求最后队伍的顺序,一次输出标识符。第一步是倒序的思想,最后一个人前边应该有几个空位置,倒数第二个人有几个空位置依次确定。第二步,根据线段树的思想,记录该线段中有几个空位置。(屌丝一开始的思路是记录该线段之前的空位置的个数,在分治的时候需要处理的线段太多原创 2015-08-27 20:58:20 · 266 阅读 · 0 评论 -
POJ 1287 Networking
//克鲁斯卡尔算法模板题,简单水过//AC代码:#include#include#includeusing namespace std;struct node{ int w,v,c;} t[3000];int cmp(node p,node q){ return p.cq.c;}int n,m;int p[3000];int find(i原创 2015-08-27 22:54:54 · 282 阅读 · 0 评论 -
POJ 2104 K-th Number
//这道题的意思是求给你一串数,叫你求第L个到第R个中第K大的数。纯暴力过得,理论上暴力需要60s,但这题就这样奇迹般的过了。线段树我暂时还没想到怎么做,暂时放放//AC代码:#include#include#includeusing namespace std;struct node{ int x,id;} t[1000005];int cmp(node p,n原创 2015-08-26 23:04:42 · 273 阅读 · 0 评论 -
POJ 2823 Sliding Window
//这是一道区间求最大值和最小值的题,模板题//AC代码:#include#include#includeusing namespace std;#define lson l,m,rt1#define rson m+1,r,rt1|1const int MAX=10000005;int sum[MAX>>2];int cnt[MAX>>2];void pushup(i原创 2015-08-25 16:50:12 · 240 阅读 · 0 评论 -
HDU-1166敌兵布阵
//一维数状数组模板题AC代码:#include#include#define N 50005int a[N];char s[10];int n;int lower_bit(int i){ return i&(-i);}void add(int i,int v){ while(in) { a[i]+=v; i+原创 2015-08-20 20:43:01 · 291 阅读 · 0 评论 -
POJ 3264 Balanced Lineup
//典型的RMQ问题//AC代码:#include#include#includeusing namespace std;#define lson l,m,rt1#define rson m+1,r,rt1|1const int MAX=50005;int sum[MAX2];int cnt[MAX2];void push(int rt){ sum[rt]=原创 2015-08-24 22:30:01 · 234 阅读 · 0 评论 -
POJ 1852 Ants
题目大意:很多的蚂蚁都在长度为L(cm)的膀子上爬行,它们的速度都是1cm/s,到了棒子终端的时候,蚂蚁就会掉下去。如果在爬行途中遇到其他蚂蚁,两只蚂蚁的方向都会逆转。已知蚂蚁在棒子的最初位置坐标,但是我们不知道他们会往哪一个方向爬。请求出所有蚂蚁掉下去的最短时间和最长时间。题目分析:虽然当蚂蚁数量很多的时候情况会有很多种,但是先考虑小数量的分析就可以找到解决方法:如果只有两只的话,那么最短时原创 2015-09-01 20:31:26 · 321 阅读 · 0 评论 -
POJ 3268 Silver Cow Party
题意:描述一只母牛从N块田中的任一块(1≤N≤1000)去参加盛大的母牛聚会,这个聚会被安排在X号田(1≤X ≤N)。一共有M(1 ≤ M ≤ 100,000)条单行道分别连接着两块田,且通过路i需要花Ti(1≤Ti≤100)的时间。每头母牛必需参加宴会并且在宴会结束时回到自己的领地,但是每头牛都很懒而喜欢选择化是最少的一个方案。来时的路和去时的可能不一样。求每头牛要来回的最短原创 2015-09-01 16:42:10 · 296 阅读 · 0 评论 -
POJ 2485 Highways
//题意:求最小生成树中最大边的权值#include#include#includeusing namespace std;#define N 505int p[N];int n,L;struct node{ int u,v,c;}t[N*N];int cmp(node p,node q){ return p.c<q.c;}int find(int k)原创 2015-09-09 23:40:18 · 290 阅读 · 0 评论 -
POJ 2263 Heavy Cargo
题意:有n个城市,m条连接两个城市的道路,每条道路有自己的最大复载量。现在问从城市a到城市b,车上的最大载重能为多少。此题可由floyd算法解.我们用d[i][j]表示从i到j的路径中的负重值最大者.每次用d[i][k]+d[k][j]更新d[i][j]时,我们都用大的值去更新小的值.这样得到的新路径的负重值自然更大.#include#include#includeusing names原创 2015-09-02 23:03:00 · 358 阅读 · 0 评论