常见算法模板

#include
#include
#include
#include
using namespace std;
// 公因数 
int gcd( int a ,int b ){
	
	return b ==  0  ?  a : gcd( b, a % b );
}
//  ex_gcd( int a ,int b )

//  并查集

int father[1009];
int find( int x ){
     return x ==  father[x] ? father[x] : father[x] = find( father[x] );
}
void Union( int a ,int b ){
	 int fa = find( a );
	 int fb = find( b);
	 if( fa == fb )
	     return;
	 father[fa] = fb;	  
} 

// 最短路
int map[109][109];
int n;
void Flord(  ){
	 
	 for( int k=1;k<=n;k++)
	 	 for( int  i = 1; i<=n;i++ )
	 	      for( int j=1;j<=n;j++)
	                 map[i][j] = min (map[i][j] , map[i][k] + map[k][j] ); 
	
} 
int dis[109],vis[109];
void  dijkstra(  int s ){
	  
	 
      dis[s] = 0;
	  int tmp= 0x3f3f3f3f ,cur=-1;
	  for( int i=1;i<=n;i++){
	 	 
		  for( int j=1;j<=n;j++){
		  	   if( !vis[j] && dis[j] < tmp ){
		  	   	   tmp = dis[j];
		  	   	   cur = j;
				 }
		   }
	 	   
			vis[cur] = 1;
		   
		   for( int j=1;j<=n;j++){
	            dis[j] = min( dis[j] ,dis[cur] + map[cur][j]);	   	     
		   } 
	 } 
}
// 最短路变形,依旧是最短路。 只不过开始那个源点到自己的路径数是1.


// 字典树

int trie[1009] , sum[1009] , tol ;
void isnert( char str[] ){
	  
	 int  root = 0 ,id;
	 int  len =strlen( str );
	 for( int i=0;i< len ;i++){
          id = str[i] - 'a';
          if(trie[i][id] == 0 ){
          	 trie[i][id] = ++tol;
          }
          root = trie[i][id] ;
	  } 
	  sum[root]++;
} 

bool search( char str[] ){
	 int root = 0;
	 int id ;
	 for( int i=0;i<26;i++){
	      id = str[i] - 'a';
	      if( trie[root][id] == 0 )
	          return false;
		  root = trie[root][id];	
	 }
	 return true;
}
struct node {
	 
	 struct node * p[26];
	 int flag;
	 node(){
	     fill( p ,p+26 , NULL);
	     flag = 0;
	 }
};
struct node * root;
void insert( char str[]  ){
	 struct node * rot = root;
	 int id , len = strlen( str) ;
	 
	 for( int i =0; i< len ;i++){
	 	  
	 	  id  =  str[i] - 'a';
	 	  if( rot->p[id] == NULL ){
	 	  	  rot->p[id] = new struct node;
	 	   }
	 	   rot = rot->p[id]; 
	 } 
	 rot->flag =1; 
}

bool query( char str[ ] ){
	 
	 struct node * rot = root;
	 int id , len = strlen( str) ;
	 
	 for( int i=0;ip[id] == NULL)
              return false;
            rot = rot->p[id];  
	 }
	 return true;
}
 
int main(void){
   // 模板 
	 
	return 0;
}

 

你可能感兴趣的:(学习笔记)