UVa11248 - Frequency Hopping

2024-01-28 06:32
文章标签 frequency hopping uva11248

本文主要是介绍UVa11248 - Frequency Hopping,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        题意:给定一个有向网络,每条边均有一个容量。问是否存在一个从点1到点N,流量为C的流。如果不存在,是否可以恰好修改一条弧的容量,使得存在这样的流?

        思路:白书训练指南第一道网络流例题。。先求一次最大流,如果流量至少为C,输出possible,否则需要修改的弧一定是最小割里的弧。依次把这些弧的容量增加到C,然后求最大流,看最大流是否至少为C。不过这样做会超时,需要两个重要优化。第一个优化是秋晚最大流后把流量留着,以后每次在这基础上增广,第二个优化是每次不求最大流,增广到流量至少为C时就停下来。

        这道题绝对是坑题。。。通过这题,我学会了一个单词"unidirectional",它竟然是"undirectional"的反义词。而且这题的"in ascending order"也可以有不同的理解。。正确的理解是,先按出发顶点排序,相同的按到达顶点排序。


#include<iostream>  
#include<cmath>  
#include<cstring>  
#include<queue>  
#include<vector>  
#include<algorithm>  
#include<string.h>  
#include<cstdio>  
#define maxn 210  using namespace std;  #define INF 2000000010  int n,e,c;  struct Edge{  int u; int v;  int cap; int flow;  Edge(int u,int v,int c):u(u),v(v),cap(c),flow(0){}    Edge(){};  
};  Edge edges[maxn*maxn];  int ne;  
int head[maxn];  
int next[maxn*maxn];  void init(){  memset(head,-1,sizeof(head));  ne=0;  
}  int lv[maxn];  
bool bfs(int s,int t){  memset(lv,-1,sizeof(lv)); lv[s]=0;  queue<int> que; que.push(s);   while(!que.empty()){  int cur=que.front(); que.pop();  for(int i=head[cur];i!=-1;i=next[i]){  Edge& e=edges[i];  if(lv[e.v]!=-1)continue;  if(e.flow<e.cap){  lv[e.v]=lv[cur]+1;  que.push(e.v);  }  }  if(lv[t]!=-1)return 1;  }  return 0;  
}  int cur[maxn];  
int dfs(int x,int a){  if(x==n||a==0)return a;  int re=0;  for(int& i=cur[x];i!=-1;i=next[i]){  Edge& e=edges[i];  int t;  if(lv[e.v]==(lv[x]+1)&& (t=dfs( e.v , min(a,e.cap-e.flow))) ){  edges[i].flow+=t;  edges[i^1].flow-=t;  re+=t;  a-=t;  if(a==0)break;  }  }  return re;  
}  bool cmp(int a,int b){if(edges[a].u==edges[b].u){return edges[a].v<edges[b].v;}return edges[a].u<edges[b].u;
}int maxflow(int s,int t,int _m){  int flow=0;  while(bfs(1,n)){  memcpy(cur,head,sizeof(head));  flow+=dfs(s,INF);  if(flow>=_m)return flow;  }  return flow;  
}  void addedge(int u,int v,int c){  edges[ne]=Edge(u,v,c);    next[ne]=head[u];  head[u]=ne;  ne++;  edges[ne]=Edge(v,u,0);  next[ne]=head[v];  head[v]=ne;  ne++;  
}  int flows[maxn*maxn];  
//还原流量 
void initflow(){  for(int i=0;i<e*2;i++){  edges[i].flow=flows[i];  }  
}  int optionu[maxn*maxn];  
int optionv[maxn*maxn];  int main(){  int cas=0;  while(cin>>n>>e>>c){  if(n==0&&e==0&&c==0)break;  cas++;  init();  for(int i=1;i<=e;++i){  int u,v,c;  scanf("%d%d%d",&u,&v,&c);  addedge(u,v,c);  }  int ans=maxflow(1,n,INF);  printf("Case %d: ",cas);  if(ans>=c){  printf("possible\n");  }else{  for(int i=0;i<2*e;i++){  flows[i]=edges[i].flow;  }  bfs(1,n);  vector<int>cuts;  for(int i=0;i<2*e;i+=2){  if( (lv[edges[i].u]!=-1) && (lv[edges[i].v]==-1) ){  cuts.push_back(i);  }  }  sort(cuts.begin(),cuts.end(),cmp);//升序 int cnt=0;  int siz=cuts.size();  for(int i=0;i<siz;i++){  int tmp=edges[cuts[i]].cap;  edges[cuts[i]].cap=c;  int d=maxflow(1,n,c-ans);//d是扩容后得到的额外流量   edges[cuts[i]].cap=tmp;  initflow();  if(ans+d>=c){//扩容成功   optionu[cnt]=edges[cuts[i]].u;  optionv[cnt]=edges[cuts[i]].v;  cnt++;  }  }  if(cnt){  printf("possible option:");  for(int i=0;i<cnt;i++){  printf("(%d,%d)",optionu[i],optionv[i]);  if(i!=cnt-1)printf(",");  }  printf("\n");  }else{  printf("not possible\n");  }  }  }  return 0;  
}  




这篇关于UVa11248 - Frequency Hopping的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/652757

相关文章

Chapter 10 Stability and Frequency Compensation

Chapter 10 Stability and Frequency Compensation Chapter 8介绍了负反馈, 这一章介绍稳定性, 如果设计不好, 负反馈系统是要发生震荡的. 首先我们学习理解稳定判断标准和条件, 然后学习频率补偿, 介绍适用于不同运放的补偿方式, 同时介绍不同补偿对两级运放slew rate的影响, 最后介绍Nyquist’s判断标准 10.1 Gener

TF-IDF(Term Frequency-Inverse Document Frequency)

TF-IDF(Term Frequency-Inverse Document Frequency)是一种常用于信息检索和文本挖掘的统计方法,用以评估一个词语对于一个文件集或一个语料库中的其中一份文件的重要程度。它的重要性随着词语在文本中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。TF-IDF算法主要应用于关键词抽取、文档相似度计算和文本挖掘等领域。 以下是TF-IDF算法的

TF-IDF(Term Frequency-Inverse Document Frequency)算法

TF-IDF(Term Frequency-Inverse Document Frequency)是一种用于文本挖掘和信息检索的统计方法,主要用于评估一个单词在一个文档或一组文档中的重要性。它结合了词频(TF)和逆文档频率(IDF)两个指标。以下是详细解释: 1. 词频(TF,Term Frequency) 词频表示一个单词在一个文档中出现的频率。假设我们有一个单词 ( t ) 和一个文档 (

词频统计(Word Frequency Analysis)详解

词频统计(Word Frequency Analysis)是语言学和文本分析中的一个重要工具,用于统计文本中各个词汇的出现频率。以下是关于词频统计(PTA)的详细解释,结合参考文章中的相关信息进行归纳和总结: 一、定义与目的 词频统计是对语篇或语料库中某一语词或短语出现的频数进行统计的过程或结果。其目的是通过量化词汇在文本中的出现次数,分析文本的主题、关键词、趋势等信息,为文本分析、数据挖掘、

Chapter 6 Frequency Response of Amplifiers

Chapter 6 Frequency Response of Amplifiers 这一节我们学习单极和差分运放的频率响应. 6.1 General Considerations 我们关心magnitude vs 频率, 因此有低通, 带通, 高通滤波器 6.1.1 Miller Effect Miller’s Theorem 考虑impedance Z1和Z2, X和Y之间增益

Leetcode 3144. Minimum Substring Partition of Equal Character Frequency

Leetcode 3144. Minimum Substring Partition of Equal Character Frequency 1. 解题思路2. 代码实现 题目链接:3144. Minimum Substring Partition of Equal Character Frequency 1. 解题思路 这一题的话思路上还是比较直接的,就是一个动态规划,这里就不过多展开了

【真实世界图像超分】《Frequency Consistent Adaptation for Real World Super Resolution》2012 Nanjing University

摘要:最近的基于深度学习的超分方法在已知退化核图像上已经展现出卓越的性能。但是这些方法往往在真实世界场景下表现不尽如人意,因为作为训练样本的LR图像通常来自于理想退化核(bicubic下采样),它们不同于真实源图像域。训练样本的LR图像和真实源图像的领域差异在频率密度上被明显观察到。这一点启示我们显示地缩小由不正确的退化造成的领域差异。我们设计了一个频率一致性模块,确保在真实世界场景应用已经存在的

【论文阅读笔记】Frequency Perception Network for Camouflaged Object Detection

1.论文介绍 Frequency Perception Network for Camouflaged Object Detection 基于频率感知网络的视频目标检测 2023年 ACM MM Paper Code 2.摘要 隐蔽目标检测(COD)的目的是准确地检测隐藏在周围环境中的目标。然而,现有的COD方法主要定位在RGB域中的图像对象,其性能尚未得到充分利用,在许多具有挑战性的场景。

ICCV 2021 | FcaNet: Frequency Channel Attention Networks 中的频率分析

ICCV 2021 | FcaNet: Frequency Channel Attention Networks 中的频率分析 论文:https://arxiv.org/abs/2012.11879代码:https://github.com/cfzd/FcaNet 文章是围绕 2D 的 DCT 进行展开的,本文针对具体的计算逻辑进行梳理和解析。 f ( u , v ) = α u α v

UVA821 Page Hopping 解题报告

UVA821 Page Hopping 解题报告 题目链接 https://vjudge.net/problem/UVA-821 题目大意 最近的研究表明,互联网上任何一个网页在平均情况下最多只需要单击19次就能到达任意一个其他网页。如果把网页看成一个有向图中的结点,则该图中任意两点间最短距离的平均值为19。输入一个n(1≤n≤100)个点的有向图,假定任意两点之间都相互到达,求任意两