Bug in Code CodeForces - 420C (计数,图论)

大意: 给定$n$结点无向图, 共n条边, 有重边无自环, 求有多少点对(u,v), 满足经过u和v的边数>=p

 

 

 

 

可以用双指针先求出所有$deg_u+deg_v \ge p$的点对, 但这样会多算一些有公共边的

再枚举边, 减去 $deg_u+deg_v-cnt(u,v) < p$的即可

其中$deg$为点的度数, $cnt(u,v)$为$u$与$v$之间的边数

#include 
#include 
#include 
#include 
#define REP(i,a,n) for(int i=a;i<=n;++i)using namespace std;
typedef long long ll;
typedef pair pii;const int N = 2e6+10;
map,int> g;
int deg[N], n, p;int main() {scanf("%d%d", &n, &p);REP(i,1,n) {int u, v;scanf("%d%d", &u, &v);if (u>v) swap(u,v);++g[pii(u,v)],++deg[u],++deg[v];}ll ans = 0;for (auto it:g) {int x=it.first.first,y=it.first.second;if (deg[x]+deg[y]>=p&°[x]+deg[y]-it.secondi&°[now]+deg[i]>=p) --now;ans += n-max(i,now);}printf("%lld\n",ans);
}

 

转载于:https://www.cnblogs.com/uid001/p/10428080.html


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部