作者在 2007-12-19 16:49:09 发布以下内容
题目的意思是现在我知道一定量的序列,那么我要把这个序列排成一个升序还需要多少个比较关系。
这题目的主要想法就是不能顺着题意去做,如果你去建一棵树的话,基本就没办法下手。
主要的方法:
现在已经知道了已有多少种的比较关系;(如果1>2,2>3,那么1>3这样就有了三种关系1与2,2与3,1与3)
剩下的事情就是要知道还差多少种的关系;
源代码:
Problem: 3275 | User: keloy | |
Memory: 4072K | Time: 247MS | |
Language: C++ | Result: Accepted |
- Source Code
#include <iostream> using namespace std; int const maxn=1001; int from[maxn][maxn]; int fp[maxn]; bool inS[maxn]; int seach(int num) { int count=0; if(fp[num]==0) return 0; else{ inS[num]=1; for(int i=0;i<fp[num];i++) { if(inS[from[num][i]]==0) { inS[from[num][i]]=1; count+=seach(from[num][i])+1; } } return count; } } main() { int N,M; long int sum=0; cin >>N>>M; for(int i=0;i<=N;i++) { fp[i]=0; } for(i=0;i<M;i++) { int a,b; cin >>a>>b; from[a][fp[a]++]=b; } for(int j=1;j<=N;j++) { memset(inS,0,maxn); sum+=seach(j); } cout <<(N*(N-1)/2)-sum<<endl; return 0; }
这个题目还可以优化,我比较的懒就没做,不好意思哈