训练日记2019.9.11 弱者为何要战斗

2019.9.11 星期四
今天去招聘会,和上次工院的一样,发现并没有什么我可以做的工作。遇见了的朋友谈起这些也是摆摆手,看来可能中国大二的学生真的不属于这里吧。不过后来听说有微软?我赶紧跑过去看了看,老天,人排成了一大队。老老实实排吧,快要排到的时候,我突然想起来今天仓促之下未能来得及换衣服,一身运动装,uhhhh, 真是灾难现场了。厚着脸皮去问了下,他们说他们主要要招大三快要毕业的,大二可以网申。好吧这不就是摆明了不要我嘛hhh。

可能是太饿了还是太困了,从刚才写完那道题开始效率就每况愈下,直到现在了脑子里一点想学习的想法都没有。那咱就不学了!(暴言然后向生活低头认错)根据以往的经验,我写五三的时候高效两周总会有半周的低效率,强行学习只会让自己的效率更低,不如先休息休息。明天再战,今天不工作了。

那今天就允许自己没有新进展,不过事实上还是有一点的,作业都写完了,上课也都的确在好好听来着,写代码也写了4个小时了只写出来一题,现在什么也不想干,只想回家好好吃一顿饭,然而我还在控制体重,生无可恋(-。-; )。 上周连续三天吃多,直接导致这周感觉整个人都不好了。有趣的是自己胖还就是胖脸,肚子和腰上是一点赘肉都没有,脸是要给别人看的,所以,不能胖!减肥嘛,这个事情对于我这个从200斤瘦下来的人不是难事,每天都不吃东西就好了。不过我发现来这里之后挺难做到的,学习的时候没有别的事情就想吃东西,这也难怪去北京学习半个月花了1000块钱整在吃上,估计要搁到前几年我真的是挺难养活的hhh。学着学着就打开食物页面了,看到椰蓉月饼,看到郑州的上井自助和猪肚鸡,omg,饿死了饿死了,我现在真的想冲到宿舍吃东西,然而想想自己看着好吃的冲回去吃了一堆垃圾食品也是够搞笑的,还是算了,减肥!这周末中秋节了,自己屯着的月饼可以拿出来了,到周末放松下。跟朋友分享下月饼。

来写下今天的进展吧,写完我就撤了,今天总的来说是一个非常良好的开端,我学会如何删边了,遇到没有重边的图,直接在SPFA上设置限制条件遇到要删掉的那条边直接跳过去就行了,果断AC了HDU1595,不过有点头疼的就是没有找到怎么判重,尤其是双向边,两遍插入之后的对应顺序搞不清很容易就误删或者是误判了,哪一个出现了问题代码都过不去。明天再学。我发现新的练习题集好像很多内容都是图论题了,昨天做了道杭电的问题,求两个城市之间途径两个城市的次小最短路,我做着做着就感觉不对劲了,我感觉马上要打表然后递推求解了,这题我好像在哪见过,而且不是最短路的题目。一回去翻郭神的讲义,md,果然这不是最短路而是典型tsp问题的,出题人怎么搞的。不过这种题确实和以前遇到的单纯最短路问题相比有趣多了,也更贴近实战,不妨一试。今天就到这里了,先把AC代码发上,其他?那是明天的事情了,拜拜了各位。

#include <bits/stdc++.h>
using namespace std;
#define limit 20000 + 5
#define INF 0x3f3f3f3f
#define lowbit(i) i&(-i)//定义lowbit函数
#define EPS 1e-6
#define ff(a) printf("%d\n",a );
typedef long long ll;
void read(int &x){
    char ch = getchar();x = 0;
    for (; ch < '0' || ch > '9'; ch = getchar());
    for (; ch >='0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
}//快读
struct edge{
    int to ;
    int weight;
    edge() = default;
    edge(int tt, int ww) : to(tt), weight(ww){}
    bool operator<(const edge & rhs)const{
        return weight > rhs.weight;
    }
};
vector<vector<edge> >v,rev;
int x,y;
double getDist(int x1, int y1 , int x2 ,int y2){
    return sqrt(pow(x1 - x2,2) + pow(y1 - y2,2));
}
int n,m;
int vis[limit],Prev[limit],dist[limit];
int start, en;
void spfa(int s){
    for(int i = 0 ; i <= n ; ++i){
        vis[i] = 0;
        dist[i] = INF;
        Prev[i] = 0;
    }//初始化
    queue<int>q;
    dist[s] = 0;
    vis[s] = 1;
    q.push(s);
    while(!q.empty()){
        int vs = q.front();
        q.pop();
        vis[vs] = 0;
        for(int i = 0 ; i < v[vs].size() ; ++i){
            int ve = v[vs][i].to, weight = v[vs][i].weight;
            if(vs == start && ve == en){
                continue;//别走这条边,已经被选定了
            }
            if(dist[vs] != INF && dist[vs] + weight < dist[ve]){
                dist[ve] = dist[vs] + weight;
                Prev[ve] = vs;
                //printf("The edge being updated is %d to %d\n", Prev[ve], ve);
                if(!vis[ve]){
                    vis[ve] = 1;
                    q.push(ve);//继续查找
                }
            }
        }
    }
}
void spfa2(int s){
    for(int i = 0 ; i <= n ; ++i){
        vis[i] = 0;
        dist[i] = INF;
    }//初始化
    queue<int>q;
    dist[s] = 0;
    vis[s] = 1;
    q.push(s);
    while(!q.empty()){
        int vs = q.front();
        q.pop();
        vis[vs] = 0;
        for(int i = 0 ; i < v[vs].size() ; ++i){
            int ve = v[vs][i].to, weight = v[vs][i].weight;
            if(vs == start && ve == en){
                continue;//别走这条边,已经被选定了
            }
            if(dist[vs] != INF && dist[vs] + weight < dist[ve]){
                dist[ve] = dist[vs] + weight;
                if(!vis[ve]){
                    vis[ve] = 1;
                    q.push(ve);//继续查找
                }
            }
        }
    }
}
int main(){
    while(~scanf("%d%d" , &n,&m)) {
        v.resize(n + 1);
        start = -1, en = -1;
        for(int i = 0 ; i < m ; ++i){
            int a,b,w;
            scanf("%d%d%d" , &a, &b , &w);
            //v[a].push_back(edge(b,w));
            v[b].push_back(edge(a,w));
        }
        spfa(n);
        int maxLen = -INF;
        int iter = 1;//迭代器
        int route = dist[1];
        do{
            start = Prev[iter] ,en = iter;
            spfa2(n);//从n出发走到1
            if(dist[1] != INF){
                maxLen = max(maxLen, dist[1]);
            }
            iter = Prev[iter];//找到前面这一点
            //printf("->%d",iter);
        }while(iter);
        printf("\n");
        ff(maxLen != -INF ? maxLen: route);
        v.clear();
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值