您的位置:首页 > 大数据 > 人工智能

hdu4460-最短路&思维- Friend Chains

2017-09-21 16:07 387 查看
http://acm.hdu.edu.cn/showproblem.php?pid=4460

郁闷死,,开始用floyd写的,1e9左右。。

肯定超时,然后感觉暴力最短路这样 1e7了估计也够呛。

试一下是能写的。。暴力最短路。。

用了两种写法, 都是可以的。并且很像。

#include <bits/stdc++.h>
using namespace std;
const int maxn=20005;
int m,n;
const int inf=0x3f3f3f3f;
map<string,int>mp;
string s,s2;
int d[maxn];
int len;
int head[maxn];
struct Node
{   int to,from,next;
}node[maxn];
void add(int a,int b,int c){
node[len].to=b;
node[len].next=head[a];
head[a]=len++;
}
void init(){
len=0;
memset(head,-1,sizeof(head));
}
bool vis[maxn];
/*void spfa(int s){
queue<int>q;
memset(vis,false,sizeof(vis));
memset(d,0x3f,sizeof(d));
q.push(s);
d[s]=0;
vis[s]=true;
while(!q.empty()){
int u=q.front();
q.pop();
vis[u]=false;
for(int i=head[u];i!=-1;i=node[i].next){
int to=node[i].to;
if(d[to]>d[u]+1){
d[to]=d[u]+1;
if(!vis[to]){
vis[to]=true;
q.push(to);
}
}
}
}
}*/
struct qnode
{   int to,dis;
qnode(int _a,int _b){to=_a,dis=_b;}
bool operator<(const qnode&r)const{
return dis>r.dis;
}
};
void dijkstra(int s){
priority_queue<qnode>q;
memset(d,0x3f,sizeof(d));
memset(vis,false,sizeof(vis));
q.push(qnode(s,0));
d[s]=0;
vis[s]=true;
while(!q.empty()){
qnode u=q.top();
q.pop();
vis[u.to]=false;
for(int i=head[u.to];i!=-1;i=node[i].next){
int to=node[i].to;
if(d[to]>d[u.to]+1){
d[to]=d[u.to]+1;
if(!vis[to]){
vis[to]=true;
q.push(qnode(to,d[to]));
}
}
}
}
}
int main()
{   ios::sync_with_stdio(false);
while(cin>>m){
mp.clear();
if(!m) break;
init();
for(int i=1;i<=m;i++){
cin>>s;
mp[s]=i;
}
cin>>n;
for(int i=0;i<n;i++){
cin>>s>>s2;
add(mp[s],mp[s2],1);
add(mp[s2],mp[s],1);
}
bool flag=false;
int ans=-1;
for(int i=1;i<=m&&!flag;i++){
dijkstra(i);
for(int j=1;j<=m&&!flag;j++){
if(i==j)continue;
ans=max(ans,d[j]);
if(d[j]==inf){
flag=true;
}
}
}
if(flag)
puts("-1");
else
printf("%d\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  namespace