`
人生难得糊涂
  • 浏览: 117332 次
社区版块
存档分类
最新评论
文章列表
整整一天都在弄这个 ,终于AC了 。 需要注意的地方都在代码注释里了!     #include<iostream> #include<cstdio> #include<string> #include<algorithm> using namespace std; #define EMAX 1030 int t,n; int num;//记录边数目 int vis[30]; int head[EMAX]; int next[EMAX]; int fa[30]; int in[30]; in ...
题意:求一个图所有生成树中 最大边与最小边的差的最小值。 解题思路:要求max-min的最小值 就是要让max最小 min 最大。 而我们的kruskal算法求得的当前生成树的max一定是最小的。所以我们只要将min从小到大遍历,然后求得最小值即可。(语言表达的有点绕口,建议参照代码结合着看)。 #include "iostream" #include "algorithm" using namespace std; #define MAXSIZE 6000 #define INF 100000 struct node{ int u ...
此题要注意松弛条件   #include<iostream> #include<queue> using namespace std; #define MAXSIZE 1000 typedef struct node{ int u; int v; double w; double c; }node; node p[MAXSIZE]; int head[MAXSIZE]; int next[MAXSIZE]; int n,m,s; double dis[MAXSIZE]; double v;//v 为初始拥有的货币数量 int ...
裸PRIM 没什么好说的   #include<iostream> using namespace std; #define MAXSIZE 2010 #define INF 100000 int map[MAXSIZE][MAXSIZE]; int dp[MAXSIZE][MAXSIZE]; int n; int vis[MAXSIZE]; int dis[MAXSIZE];//记录已有的树到该点的最短距离 int prim() { int i,j,ans=0; memset(vis,0,sizeof(vis)); //把第一个顶点加入集合 ...
之前也写过Kruskal算法,到今天才发现 原来以前的写错了。(也不能说完全错,只是效率好低)。   以前忽视的地方主要有两点,一是Kruskal算法,一般先对边从小到大排好序,然后从小到大区边。 这样的话,排完序以后就只要一个循环就可以走完。 二是 并查集的路径压缩,我以前对并查集合并是遍历所有的结点对两个集合合并, 而正确的做法应该是这样 int flindfather(int a) { if(a==father[a]) return a; else return findfather(father[a]); }   而其实我们还可以进行路径压缩,这才是并 ...
一道求最短路径的最长边的题,本身没什么好说的。  很大的一个问题是在输入上面,怎么把字符串中的数字转换为整数  。 可以用C中的 int t =atoi(char *c)方法 discuss中也有人给出了另一种方法 if(scanf("%d",&m)!=0) map[i][j]=map[j][i]=m; else { map[i][j]=map[j][i]=INITMAX; scanf("x"); } 因为 scanf("%d%d",&a,&b); 如 ...
题目大意: 给你p门课程和n个学生,一个学生可以选0门,1门,或者多门课程,现在要求一个由p个学生组成的集合,满足下列2个条件: 1.每个学生选择一个不同的课程 2.每个课程都有不同的代表 如果满足,就输出YES 题解:直接用二分图最大匹配即可,得到的匹配数如果等于课堂个数,则输出YES #include<iostream> using namespace std; #define MAXSIZE 310 int map[MAXSIZE][MAXSIZE]; int vis[MAXSIZE];//是否拜访过 int isWho[MAXSIZE];//记录右边的 ...
这题是多源点多汇点的问题,对于此类问题,只要建立一个超级原点,和超级汇点就行了 ,超级源点可以到原图中所有的点,原图中所有的点都可以到超级汇点。而解决最大流问题用的是EK算法。 不了解的请自行百度。 #include<iostream> #include<queue> using namespace std; #define MAXSIZE 130 int map[MAXSIZE][MAXSIZE]; int pre[MAXSIZE]; queue<int>que; int n,np,nc,m; int bfs(int src,int de ...
题目大意:在大学里有许许多多的课程,现在小明需要去选择课程,他是一个爱学习的人,所以想尽可能多的选择课程, 在学校里有n个课程,并且在学校规定,每周里的每天有12节课,那么一周就有7*12节课。 输入第一行为n,代表有n个课程 接下来n行,每行第一个数字x代表这个课程在这一周里面需要上x次。 然后跟着x对数字,第一个D代表这周的哪一天,第二个C代表这天的哪一节课 如果几个课程都在那d天的那c节课上课,那么你需要选择其中的一个,而不能选择多个课程 现在要求算出小明最多可以选择多少个课程.(题意翻译来自http://blog.csdn.net/wangjian8006/article/detail ...
本文做的压缩软件其压缩算法是哈夫曼压缩, 不了解哈夫曼编码基本思想的同学请自行百度。 哈夫曼压缩软件基本思路: 一.压缩 1.统计文件中各字节出现的次数。 2.根据第一步结果建立哈夫曼树 3.得到每个字节的哈夫曼编码 4.对文件每个字节进行编码,以每8位为一字节写入到压缩后的文件   压缩文件内容: 新的哈夫曼编码表(原哈夫曼表的每对KEY 与VALUE 调换位置)+文件编码+补0个数(占一字节)   二:解压 1.读入哈夫曼编码表 2.每读入一个字节就将其转换为其二进制形式的字符串,判断是否为哈夫曼码 3.第二步的结果如果哈夫曼编码,则译码并写入解压文件,否则继续 ...
从开始着手做五子棋,到现在已经有一段时间了。这个项目也算告一段落。 从开始做的网络版,再到加入人机元素,  可谓是耗尽精力。   人机水平达到了比较牛逼的程度,可以战胜大多数人(略显夸张。。) 大言不惭的说最好,也是不符合程序猿严谨的风格,在新手中看来这个程序应该是写的可以了。但大牛看来就是乱七八糟(被大牛吐槽过)。。人机写到这个程度感觉再要进一步很难了。所以就先把这个版本发出来。   先看下效果图吧。 还是很漂亮的吧。这个界面也花了我很久的时间。   登陆界面      人机界面   可以更换背景          网络人人版 可下棋聊天         ...
poj1251 用的是Kruskal算法 以及并查集 #include "iostream" using namespace std; #define maxsize 110 typedef struct Edge { int weight;//权值 int node1;//顶点 int node2;//顶点 } Edge; Edge e[maxsize]; int vis[maxsize]; int putIn(int n) { //输入 char ch; int num; char ch1; ...
此题就是prim算法模板 直接给代码、 #include "iostream" using namespace std; #define MAXSIZE 102 int map[MAXSIZE][MAXSIZE]; int vis[MAXSIZE]; int temp[MAXSIZE]; int main() { int n; while (scanf("%d",&n)!=EOF) { int ans=0; int i,j; for (i=0;i<n;i++) { for ( ...
    本文来自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/7433673,转载请注明。        上一篇讲述了线程的互斥(同步),但是在很多情况下,仅仅同步是不够的,还需要线程与线程协作(通信),生产者/消费者问 ...
在JAVA中,线程与线程之间的数据是共享的,因此,当多个线程同时改变相同的对象,线程会相互倾轧。根据线程访问数据的不同线性,会产生被腐蚀的对象。 为了避免这种现象,我们需要对需要保护的对象上锁,这样在同一时间只能有一个线程访问这个数据,而其他的线程进入等待队列,知道这个线程访问完数据并释放锁,等待队列中的线程才能获得锁。 上锁的方法有多种,这里只写出常用的三种 1.synchronized代码块 synchronized (object) {} 例如:   public class TraditionalThreadSynchronized { public static ...
Global site tag (gtag.js) - Google Analytics