hdu 4460 && hdu 4461 && hdu 4463

来源:互联网 发布:淘宝如何设置选项卡 编辑:程序博客网 时间:2024/06/07 05:01

hdu 4463

Outlets


裸的最小生成树  ,只是有一条边是必须出现在树中,直接一开始把他们连在一起就行了。




hdu  4461

The Power of Xiangqi


签到的,每个字母有自己的能量,但如果没有同时拥有B和C且总能量本来就>1,那总能量-1,求红和黑谁的能量多



hdu 4460 

Friend Chains

无向图,求任意两点的最短路的最大值,但此图须联通.....

SPFA!
#include<iostream>#include<cstdio>#include<string.h>#include<string>#include<vector>#include<map>#include<queue>#include<algorithm>using namespace std;#define INF 1000000000map<string,int>M;vector<int>e[1000+10];queue<int>q;int d[1000+10];int vis[1000+10];int n,m;string s1,s2,s;int main(){    while(scanf("%d",&n)&&n)    {        M.clear();        for(int i=1;i<=n;i++)        e[i].clear();        while(q.empty()==false) q.pop();        for(int i=1;i<=n;i++)        cin>>s,M[s]=i;        cin>>m;        for(int i=1;i<=m;i++)        {            cin>>s1>>s2;            int a=M[s1],b=M[s2];            e[a].push_back(b);            e[b].push_back(a);        }        int ans=0;        for(int i=1;i<=n;i++)        {            for(int j=1;j<=n;j++) d[j]=INF;            d[i]=0;            memset(vis,0,sizeof(vis));            vis[i]=1;            q.push(i);            while(!q.empty())            {                int x=q.front();                q.pop();                vis[x]=0;                for(int r=0;r<e[x].size();r++)                {                    if(d[e[x][r]]>d[x]+1)                    {                        d[e[x][r]]=d[x]+1;                        if(!vis[e[x][r]])                        {                            vis[e[x][r]]=1;                            q.push(e[x][r]);                        }                    }                }            }            for(int j=1;j<=n;j++) ans=max(ans,d[j]);        }        if(ans==INF) ans=-1;        printf("%d\n",ans);    }}