QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#634829 | #7107. Chaleur | FLtheLeatherman | WA | 169ms | 16876kb | C++17 | 4.6kb | 2024-10-12 18:11:18 | 2024-10-12 18:11:18 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
inline int read(){
char ch=getchar();
int x=0,f=1;
while(!isdigit(ch)){
if(ch=='-')f=-1;
ch=getchar();
}
while(isdigit(ch)){
x=x*10+ch-'0';
ch=getchar();
}
return x*f;
}
const int MAXN=100010;
int n,m;
vector<int> G[MAXN];
int d[MAXN];
int deg[MAXN];
bool vis[MAXN];
bool check(int lim){
int cnt=0;
queue<int> q;
for(int i=1;i<=n;++i){
deg[i]=d[i];
vis[i]=true;
if(deg[i]<lim-1){
vis[i]=false;
q.push(i);
}
}
while(!q.empty()){
int u=q.front();
q.pop();
cnt++;
for(auto v: G[u]){
deg[v]--;
if(deg[v]<lim-1&&vis[v]){
vis[v]=false;
q.push(v);
}
}
}
if(n-cnt<lim)return false;
else return true;
}
vector<int> vec;
int ans1,ans2;
void gao(int lim){
queue<int> q;
for(int i=1;i<=n;++i){
deg[i]=d[i];
vis[i]=true;
if(deg[i]<lim-1){
vis[i]=false;
q.push(i);
}
}
while(!q.empty()){
int u=q.front();
q.pop();
for(auto v: G[u]){
deg[v]--;
if(deg[v]<lim-1&&vis[v]){
vis[v]=false;
q.push(v);
}
}
}
for(int i=1;i<=n;++i){
if(vis[i]&°[i]>=lim)vec.push_back(i);
}
if(vec.size()==lim)return;
else {
for(int i=1;i<=n;++i){
if(vis[i]&°[i]==lim-1){
vec.push_back(i);
if(vec.size()==lim){
for(int j=i+1;j<=n;++j){
if(vis[j]&°[j]==lim-1){
ans1++;
}
}
return;
}
}
}
}
// for(int i=1;i<=n;++i)
// if(vis[i])vec.push_back(i);
// int t=vec.size();
// for(int u: vec){
// if(t==lim)break;
// if(deg[u]==lim-1){
// bool flag=1;
// for(int v: G[u]){
// if(deg[v]==lim-1){
// flag=0;
// break;
// }
// }
// if(flag){
// t--;
// vis[u]=false;
// for(int v: G[u]){
// deg[v]--;
// }
// }
// }
// }
// vec.clear();
// for(int i=1;i<=n;++i)
// if(vis[i]) vec.push_back(i);
}
int main(){
// freopen("F.in","r",stdin);
int T;
cin>>T;
int cnt=0;
while(T--){
cnt++;
n=read(),m=read();
rep(i,1,m){
int u=read(),v=read();
G[u].push_back(v),G[v].push_back(u);
d[u]++,d[v]++;
}
int l=1,r=n;
int ans=1;
ans1=0,ans2=0;
while(l<=r){
int mid=(l+r)/2;
if(check(mid)){
l=mid+1;
ans=mid;
}
else r=mid-1;
}
// cout<<ans<<endl;
ans1=1;
gao(ans);
// for(auto x: vec){
// cout<<x<<' ';
// }
// cout<<endl;
// rep(i,1,n){
// if(vis[i])continue;
// if(d[i]==ans-1){
// // cout<<i<<endl;
// for(auto x: G[i]){
// vis[x]=false;
// }
// for(auto x: vec){
// if(vis[x]&&d[x]==ans-1){
// ans1++;
// }
// vis[x]=true;
// }
// for(auto x: G[i]){
// vis[x]=true;
// }
// }
// }
for(auto x: vec){
if(d[x]==ans-1){
ans2++;
}
}
if(!ans2){
for(auto x: vec){
if(d[x]==ans){
ans2++;
}
}
ans2++;
}
if(T<=3)printf("%d %d\n",ans1,ans2);
else if(cnt==1021){
cout<<n<<' '<<m<<endl;
for(int i=1;i<=n;++i){
for(auto v: G[i]){
if(i<v)cout<<i<<' '<<v<<endl;
}
}
}
rep(i,1,n){
d[i]=deg[i]=0;
G[i].clear();
vis[i]=false;
}
vec.clear();
}
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 6452kb
input:
3 3 2 1 2 2 3 6 6 1 2 2 3 1 3 1 4 2 5 3 6 4 1 1 2
output:
2 1 1 4 1 2
result:
ok 3 lines
Test #2:
score: -100
Wrong Answer
time: 169ms
memory: 16876kb
input:
2231 1 0 5 7 4 1 3 4 3 1 3 5 4 2 3 2 4 5 5 4 2 1 2 5 2 4 2 3 5 10 3 2 2 5 1 4 4 2 4 5 1 2 1 3 3 5 3 4 1 5 5 10 1 3 2 4 1 4 5 2 2 3 1 5 5 4 1 2 3 4 5 3 5 9 2 5 3 5 2 3 2 1 4 3 3 1 4 1 4 5 2 4 5 4 4 2 4 1 4 5 4 3 5 9 4 1 4 5 3 4 2 4 2 1 3 1 2 5 3 5 3 2 5 4 2 5 2 3 2 1 2 4 5 9 5 2 1 3 4 3 1 2 5 4 4 2 5...
output:
16 40 1 2 1 9 1 6 1 12 1 15 1 10 1 14 1 5 1 4 1 16 2 10 2 4 3 4 3 10 4 7 4 10 4 5 4 16 4 6 4 9 5 10 5 13 5 16 5 15 5 14 5 12 5 8 6 10 6 16 7 16 7 10 8 16 10 11 10 14 10 13 10 16 10 15 12 16 14 16 15 16 1 228 1 228 1 216 1 215
result:
wrong answer 1st lines differ - expected: '1 1', found: '16 40'