题意:n个点(从1-n编号)

m条边

下面m行 u v dis 表示双向边u v的距离

n个点表示 每个点被势力1或2占据

这里保证1 城市由势力1占据,2城市由势力2占据

思路:

求2遍spfa()

从1城市开始求所有 走到所有都是势力1的城市的距离,存在d[1]数组中,d[1][ i ] 表示经过 i 城市任意都是势力1占领的城市的点能到达 1点的最短距离

再由2城市跑一遍spfa ,求出 2势力占领的 距离2 城市最近的距离

最后ans=Min(ans, d[ 1 ] [ i ] + d[ 2 ] [ j ] + dis[ i ][ j ] )

#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
#define N 605
#define INF 99999999 using namespace std; struct node{
int to,nex;
}edge[20005]; int edgenum,head[N]; int dis[N][N],n,ans;
int zhen[N],d[3][N];
bool inq[N];
inline int Min(int a,int b){return a>b?b:a;}
void addedge(int u,int v){
edge[edgenum].to=v;
edge[edgenum].nex=head[u];
head[u]=edgenum++;
}
void spfa(int x,int other){
for(int i=1;i<=n;i++)d[x][i]=INF;
queue<int>q;while(!q.empty())q.pop();
memset(inq,0,sizeof(inq)); d[x][x]=0;
q.push(x); inq[x]=1; while(!q.empty())
{
int u=q.front();q.pop(); inq[u]=0;
for(int i=head[u];i!=-1;i=edge[i].nex)
{
int v=edge[i].to;
if(zhen[u]==zhen[v] && d[x][v]>d[x][u]+dis[u][v] )
{
d[x][v]=d[x][u]+dis[u][v];
if(!inq[v] && v!=other)
inq[v]=true, q.push(v);
}
}
}
} int main(){
int i,m;
while(scanf("%d",&n),n)
{
scanf("%d",&m);
memset(head,-1,sizeof(head)); memset(dis,-1,sizeof(dis));
edgenum=0; while(m--){
int u,v,dd;
scanf("%d%d%d",&u,&v,&dd);
if(dis[u][v]==-1)//去重边
addedge(u,v),addedge(v,u),dis[u][v]=dis[v][u]=dd;
else dis[u][v]=dis[v][u]=Min(dis[u][v],dd);
}
for(i=1;i<=n;i++)scanf("%d",&zhen[i]); ans=INF;
spfa(1,2);
spfa(2,1);
for(i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(zhen[i]!=zhen[j] && dis[i][j]!=-1)
ans=Min(ans,d[1][i]+d[2][j]+dis[i][j]); if(ans>INF/2)ans=-1;
printf("%d\n",ans);
}
return 0;
}

poj 3767 I Wanna Go Home的更多相关文章

  1. poj 1236 Network of Schools(又是强连通分量+缩点)

    http://poj.org/problem?id=1236 Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Su ...

  2. POJ 3370. Halloween treats 抽屉原理 / 鸽巢原理

    Halloween treats Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7644   Accepted: 2798 ...

  3. POJ 2356. Find a multiple 抽屉原理 / 鸽巢原理

    Find a multiple Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7192   Accepted: 3138   ...

  4. POJ 2965. The Pilots Brothers' refrigerator 枚举or爆搜or分治

    The Pilots Brothers' refrigerator Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 22286 ...

  5. POJ 1753. Flip Game 枚举or爆搜+位压缩,或者高斯消元法

    Flip Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 37427   Accepted: 16288 Descr ...

  6. POJ 3254. Corn Fields 状态压缩DP (入门级)

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9806   Accepted: 5185 Descr ...

  7. POJ 2739. Sum of Consecutive Prime Numbers

    Sum of Consecutive Prime Numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 20050 ...

  8. POJ 2255. Tree Recovery

    Tree Recovery Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11939   Accepted: 7493 De ...

  9. POJ 2752 Seek the Name, Seek the Fame [kmp]

    Seek the Name, Seek the Fame Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 17898   Ac ...

随机推荐

  1. jquery 上下滑动效果

    <script type="text/javascript"> var myar = setInterval('AutoScroll(".li_gundong ...

  2. swift + xcode 新手上路

    有用的参考博文: 视频教程: 如何创建第一个iPhone App - HelloWorldHelloWorld 熟悉xcode: http://www.cocoachina.com/swift/201 ...

  3. myEclipse快捷键及其常用设置

    快捷键:    查找替换:ctrl + f    复制行: ctrl + alt + down    删除行: ctrl + d    插入行: shift + enter, ctrl + shift ...

  4. VS2010 .net4.0 登录QQ 获取QQ空间日志 右键选中直接打开日志 免积分 源码下载

    代码有一部分是原来写的  最近翻代码 看到了  就改了一下 CSDN上传源码 上传了几次都没 成功 郁闷   不知道怎么回事 上传不了 想要的留 邮箱 或加群77877965 下载地址在下面 演示地址 ...

  5. django开发简易博客(三)

    一.静态文件的使用 首先,新建static目录,目录下分别建立css.js.img三个子目录 修改settings.py文件 STATICFILES_DIRS = ( 'F:/web/static', ...

  6. 关于android的坑

    坑1: 使用SQLiteOpenHelper的时候如果建立的表中存在不为空的字段,但是用ContentValues()的方式来插入数据的话恰好没有往这个字段里插入数据,那么执行后市没法往数据库里插入数 ...

  7. 在windows下的QT编程中的_TCHAR与QString之间的转换

    由于在windows下的QT编程中,如果涉及到使用微软的API,那么不可避免使用_TCHAR这些类型,因此在网上查了一下,其中一个老外的论坛有人给出了这个转换,因此在这里做一下笔记 : )#ifdef ...

  8. 啊上班的二号i将诶

    http://www.huihui.cn/share/8112372 http://www.huihui.cn/share/8112363 http://www.huihui.cn/share/811 ...

  9. cocos2d-x游戏开发系列教程-超级玛丽08-消息机制

    在超级玛丽游戏里,地图类CMGameMap负责所有的程序逻辑,它包含了背景地图,包含了游戏元素精灵,当游戏中的精灵之间发生碰撞时,比如马里奥撞上砖头这种事情发生时,马里奥对象本身不知道怎么处理这个逻辑 ...

  10. Unix/Linux环境C编程新手教程(5) Red Hat Enterprise Linux(RHEL)环境搭建

    Unix/Linux版本号众多,我们推荐Unix/Linux刚開始学习的人选用几款典型的Unix/Linux操作系统进行学习. 通过./a.out ./Y.out运行出结果,证明C++程序编译成功.也 ...