记住,这是china算法,呵呵,一丝悲哀,又有一丝欣慰第一次做,用的是矩阵版本的,但貌似对于数据更大的情况要用邻接表的,继续学习View Code #include<stdio.h>#include<math.h>#include<string.h>#define INF 100000000#define min(a,b) a<b?a:bint n,m;double map[110][110];int vis[110],pre[110];int circle[110]; struct { int x,y;}node[110];double dist(i Read More
View Code #include<stdio.h>#include<algorithm>using namespace std;int l,n,m;int dis[500005];int judge(int x){ int now=0,pos=0,jump=0; while(now<l) { now+=x; while(now>=dis[pos+1]) pos++; now=dis[pos]; jump++; } return jump;}int main(){ int i,res,min; ... Read More
有n台坏掉电脑,有两种操作,O表示修好一台电脑,修好后就可以更新与其它已修好的电脑的关系了,即如果与某台已经修好的电脑在可以连接的范围内,则两台电脑建立联系,另一种操作是询问,直接找根节点就好。。。。是水题啊,不过有一些细节要注意啊。View Code #include<stdio.h>#include<string.h>#define MAX 1050struct node{ int x,y;}com[MAX];int fa[MAX],repaired[MAX];int n,d,tot;void init(){ for(int i=1;i<=n;i++) fa[ Read More
两种操作,叠立方体,数某个立方体下面有几个立方体;操作次数很多,采用并查集实现其中above[i]表示在 i 上面的立方体个数sum[i]表示根节点i下面的立方体个数,包括i所以x下面的立方体个数就等于x的根节点下面的总的立方体个数减去x上面的立方体个数(直接记录x的下面的立方体个数貌似有难度)View Code #include<stdio.h>#include<string.h>#define MAX 30010int fa[MAX],sum[MAX],above[MAX];void init(){ for(int i=0;i<=30000;i++) { fa Read More
一般的种类并查集,只不过犯了点小错误,一直TLEView Code #include<stdio.h>#include<string.h>int fa[100005],rank[100005],n;void init(){ for(int i=1;i<=n;i++) { fa[i]=i; rank[i]=0; }}int find(int x){ if(fa[x]==x) return x; int tx=find(fa[x]); rank[x]=(rank[x]+rank[fa[x]])%2; fa[x]=tx; ... Read More
View Code //dp[i]表示以第i个长方体结尾的最大高度(先排好序的)//虽说不难,但一些细节能让人崩溃,以后一定要注意//刚开始想到的状态为前i个长方体所能产生的最大高度,但亲注意://ps:这是比赛时想到的状态,悲剧就是这么发生的//如果dp[i]如上定义,那么当用第i个长方体往前覆盖时,应该在原来的路径上覆盖,而不是从i-1->1;//因此这种方法正确性貌似有待证明#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;__int64 dp[10 Read More
View Code int dist[N<<1],mx[N],my[N],m,n;vector<int> map[N];int que[N<<1],head,tail;int bfs(){ int i; head=0;tail=-1; for(i=1;i<=n;i++) if(mx[i]==-1) que[++tail]=i; for(i=0;i<=m+n;i++) dist[i]=0; int flag=0; while(head<=tail) { int u=que[head++]... Read More
How Many Answers Are WrongTime Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 521Accepted Submission(s): 213Problem DescriptionTT and FF are ... friends. Uh... very very good friends -________-bFF is a bad boy, he is always wooing TT to play the follow Read More
View Code #include<stdio.h>#include<string.h>#define min(a,b)(a<b?a:b)#define INF 9999999#define MAX 1005int S,N,end,M;int cap[MAX][MAX],flow[MAX],p[MAX];int room[MAX],belong[MAX];int q[10000];int bfs(){ int u,i; for(i=0;i<MAX;i++) { flow[i]=INF; p[i]=-1; } p[S]=0; in... Read More
题目告诉你一些距离(两个城市之间)要求每个城市各经过一次,最后回到原地,求出最短需要的距离。思想转换:每个点的入度出度均为1,相当于左边n个城市,右边n个城市,求最优匹配,由最优匹配的性质得,每个点都会在匹配中。相当于一个点出现两次(表达的不太好),即一次入度,一次出度。所以最短的路程便转换为了最优匹配问题。View Code #include<stdio.h>#include<string.h>#include<stdlib.h>#include<algorithm>using namespace std;#define MIN(a,b) a& Read More