hdu2112HDU Today trie+map
来源:互联网 发布:网络打印机的安装 编辑:程序博客网 时间:2024/05/16 19:16
trie
#include <iostream>#include <cstdio>#include <algorithm>#include <cstdlib>#include <queue>#include <cstring>#include <utility>#define MAXN 50010#define MAXM 50010using namespace std;int chd[MAXN][26];//存储节点编号int v[MAXN];//串尾节点标记//对于map<string,int>为int v[][]int ID[128];//每个字母的IDint sz,cnt;//节点数void init1(){ memset(chd, 0, sizeof(chd)); memset(v, 0, sizeof(v)); sz= 1; cnt=0; for (int i = 0; i < 26; i++) ID[i + 'a'] = i;}int Insert(char *s){ int cur=1;//标记是否存在 for(int i=0;s[i];++i){ if(!chd[cur][ID[s[i]]]){ chd[cur][ID[s[i]]]=++sz; } cur=chd[cur][ID[s[i]]]; } if(v[cur] == 0){//重点======= v[cur]= ++cnt; } return v[cur];}int n,m,s,t;typedef pair<int ,int> PII;struct edge { int v, w; edge *next; void add(int y, int z, edge *&head){ v = y; w = z; next = head; head = this; }}Te[MAXM*2],*Pe=Te,*head[MAXN*2];void add_edge(int x, int y, int z) { Pe++->add(y, z, head[x]);}int dist[MAXN];bool visit[MAXN];void dijkstra(int x) { priority_queue<PII>q; while (!q.empty()) q.pop(); memset(dist, 0x3f, sizeof(dist)); memset(visit, 0, sizeof(visit)); dist[x] = 0; q.push(make_pair(0, x)); while (!q.empty()) { while (!q.empty() && visit[q.top().second]) q.pop(); if (q.empty()) break; PII t = q.top(); q.pop(); int i = t.second; dist[i] = -t.first; visit[i]=true; for (edge *p = head[i]; p; p = p->next) if (!visit[p->v]) q.push(make_pair(-(dist[i] + p->w), p->v)); }}void init(){ init1(); memset(head,0,sizeof(head)); Pe=Te; char s1[33],s2[33]; scanf(" %s %s",s1,s2); s=Insert(s1);t=Insert(s2); //cout<<s<<' '<<t<<endl; for(int i=1;i<=n;i++) { int x,y,z; scanf(" %s %s%d",s1,s2,&z); x=Insert(s1);y=Insert(s2); //printf(" %s:%d %s:%d %d\n",s1,x,s2,y,z); add_edge(x,y,z); add_edge(y,x,z); }}int main(){ while(scanf("%d",&n)&&n!=-1){ init(); if(s == t){cout<<0<<endl;continue;} dijkstra(s); cout<<(dist[t]==0x3f3f3f3f?-1:dist[t])<<endl; } return 0;}
map
#include <iostream>#include <cstdio>#include <algorithm>#include <cstdlib>#include <queue>#include <cstring>#include <utility>#include <map>#include <string>#define MAXN 50010#define MAXM 50010using namespace std;map<string,int> mp;int n,m,s,t;typedef pair<int ,int> PII;struct edge {int v, w;edge *next;void add(int y, int z, edge *&head){ v = y; w = z; next = head; head = this; }}Te[MAXM*2],*Pe=Te,*head[MAXN*2];void add_edge(int x, int y, int z) {Pe++->add(y, z, head[x]);}int dist[MAXN];bool visit[MAXN];void dijkstra(int x) {priority_queue<PII>q;while (!q.empty()) q.pop();memset(dist, 0x3f, sizeof(dist));memset(visit, 0, sizeof(visit));dist[x] = 0;q.push(make_pair(0, x));while (!q.empty()) {while (!q.empty() && visit[q.top().second]) q.pop();if (q.empty()) break;PII t = q.top(); q.pop();int i = t.second;dist[i] = -t.first;visit[i]=true;for (edge *p = head[i]; p; p = p->next)if (!visit[p->v]) q.push(make_pair(-(dist[i] + p->w), p->v));}}void init(){ memset(head,0,sizeof(head)); Pe=Te; mp.clear(); char s1[33],s2[33],s3[33],s4[33]; int cnt=1; scanf(" %s %s",s1,s2); s=mp[s1]=cnt++; if(!mp[s2]) mp[s2]=cnt++; t=mp[s2];//cout<<s<<' '<<t<<endl;for(int i=1;i<=n;i++){int z;scanf(" %s %s%d",s3,s4,&z);if(!mp[s3])mp[s3]=cnt++;if(!mp[s4])mp[s4]=cnt++;//printf(" %s:%d %s:%d %d\n",s1,x,s2,y,z);add_edge(mp[s3],mp[s4],z); add_edge(mp[s4],mp[s3],z);}}int main(){ while(scanf("%d",&n)&&n!=-1){ init(); if(s == t){cout<<0<<endl;continue;} dijkstra(s); cout<<(dist[t]==0x3f3f3f3f?-1:dist[t])<<endl; } return 0;}
0 0
- hdu2112HDU Today trie+map
- hdu2112HDU Today(最短路+map)
- hdu2112HDU Today
- hdu2112HDU Today
- HDU2112HDU Today单源最短路
- hdu2112HDU Today dijkstra最短路
- hdu2112 HDU Today(dijkstra+map)
- 2112 HDU Today【dijkstra+map】
- hdu 2112 HDU Today(map hash)
- HDU-#2112 HDU Today(Dijkstra+map)
- hdu 2112 HDU Today (Dijkstra + map)
- HDU 2112 HDU Today (map+dijkstra)
- HDU2112---HDU Today(dijkstra)&&(map+SPFA)
- HDOJ-2112HDU Today(Floyd+MAP)
- HDU 2112 HDU Today(floyd-warshall+map)
- hdu-2112-HDU Today(dijkstra + map)
- hdu 2112 HDU Today(map+Floyd)
- hdu2112 HDU Today (floyd+stl-map)
- C/C++产生随机数
- JQuery中.AddClass()和.RemoveClass()
- 思维逻辑面试题
- C语言其实不简单:sizeof
- java socket 编程(一)
- hdu2112HDU Today trie+map
- 自己动手写CPU之第七阶段(3)——简单算术操作指令实现过程(续)
- uva 10385 - Duathlon(三分)
- 关于在MyEclipse中的jsp文件中引入…
- android.support.v4.app的Fragment…
- WebView背景无法透明的设置方法
- 图的遍历-深度优先遍历
- Struts2类型转换的作用
- iOS 图像处理 - 模糊图像