摘要: 贪心,按dj从小到大排序,并按次顺序加工。因为对于最小的那个dj是不变的,那么如果先加工其他的,那么cj就会增大,从而cj - dj就会增大,所以要先加工dj小的。#include #include#include#include#includeusing namespace std;vectora[50005];struct thing{ int p,d; int id;}t[50005];int n;int visit[50005]; //该id是否被访问过 int cmp(const void * a,const void * b){ return (*(thing *)a).d... 阅读全文
posted @ 2013-09-06 18:55 小の泽 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 看了题解才知道,原来floyd不止是用来求最短路的......用floyd,如果i和j有关则a[i][j]=1,否则为-1;能得出一个点的绝对排名的充要条件是这个点和其他每个点都有关(直接或间接)。最后遍历每一个点,如果存在一个点和这个点没有关系,那么这个点就是一个无关点,最后用n-无关点个数就是答案。 1 #include 2 #include 3 #include 4 using namespace std; 5 int a[105][105];//表示两者间是否有关,1有关,-1无关 6 int n,m; 7 void floyd(){ 8 for(int i=1;i0)12 ... 阅读全文
posted @ 2013-09-06 16:15 小の泽 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 裸的拓扑排序~#include #include#include#includeusing namespace std;vectora[105];int from[105],to[105],flag[105];//出度,入度,标记是否访问过int main(){ int n,temp; scanf("%d",&n); memset(from,0,sizeof(from)); memset(to,0,sizeof(to)); memset(flag,0,sizeof(flag)); for(int i=1;i<=n;i++){ while(scanf(" 阅读全文
posted @ 2013-09-06 14:10 小の泽 阅读(191) 评论(0) 推荐(0) 编辑