Topcoder 2C 250 最短路

    唯一写出来的一题,但也华丽丽地跪了……比赛的时候没有看清可以同时多对一起跳舞,果断跪了

     直接先最短路一下,然后除3,因为每3个人才能认识一个新人


#include <vector>
#include <list>
#include <cstring>
#include <set>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>

using namespace std;

class DancingFoxes {
public:
	int minimalDays(vector <string>);
};
struct node
{
    int v,now;
	friend bool operator <(node a,node b)
	{
	   return a.now>b.now;
	}
};

int dijkstra(int v,vector <string> M)
{
    priority_queue<node> q;
      bool don[51];
		int Dis[55];
      int n=M.size();
      memset(don,0,sizeof(don));
      memset(Dis,63,sizeof(Dis));
      Dis[v]=0;
      node now,next;
      now.v=v;
      now.now=0;
      q.push(now);
      while(!q.empty())
      {
         now=q.top();q.pop();
         int v=now.v;
        // cout<<now.v<<endl;
         if(don[v])continue;
         don[v]=1;
         for(int i=0;i<n;i++)
         {
             if(M[v][i]=='N')continue;
             int t=Dis[v]+1;
             if(t>=Dis[i])continue;
             Dis[i]=t;
         
             next.v=i;
             next.now=t;
             q.push(next);
          }
       }
       if(Dis[1]==Dis[54])return -1;
       int ans=0,t=Dis[1]+1;
       while(t>2)
       {
           t-=t/3;
           ans++;
       }
       return ans;
}
              



int DancingFoxes::minimalDays(vector <string> friendship) {
    return dijkstra(0,friendship);
	
}


//Powered by [KawigiEdit] 2.0!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值